{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 302,
   "id": "055c90a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "import datetime\n",
    "from loguru import logger\n",
    "import os\n",
    "import sys\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import sys\n",
    "np.set_printoptions(threshold=sys.maxsize)\n",
    "import pandas as pd\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')  # Hide warnings\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import matplotlib.pyplot as plt\n",
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Dense, LSTM, Dropout\n",
    "from tensorflow.keras.callbacks import EarlyStopping\n",
    "import tensorflow as tf\n",
    "import datetime\n",
    "from pandas.tseries.holiday import USFederalHolidayCalendar\n",
    "from pandas.tseries.offsets import CustomBusinessDay\n",
    "US_BUSINESS_DAY = CustomBusinessDay(calendar=USFederalHolidayCalendar())\n",
    "from yahoo_fin import stock_info as si"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 303,
   "id": "0fc04e12",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_biz_days_delta_date(start_date_str, delta_days):\n",
    "    start_date = datetime.datetime.strptime(start_date_str, \"%Y-%m-%d\")\n",
    "    end_date = start_date + (delta_days * US_BUSINESS_DAY)\n",
    "    end_date_str = datetime.datetime.strftime(end_date, \"%Y-%m-%d\")\n",
    "    return end_date_str"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 304,
   "id": "600fc84b",
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_price_data(symbol, start_date_str, end_date_str):\n",
    "    # Download data\n",
    "    try:\n",
    "        df = si.get_data(symbol, start_date=start_date_str, end_date=end_date_str, index_as_date=False)\n",
    "        return df\n",
    "    except:\n",
    "        print('Error loading stock data for ' + symbol)\n",
    "        return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 305,
   "id": "4e669b1c",
   "metadata": {},
   "outputs": [],
   "source": [
    "def cleanup_daily_file(df):\n",
    "    #  Select columns\n",
    "    df.dropna(inplace=True)\n",
    "    df.drop(\"close\", axis=1, inplace=True)\n",
    "    df.drop(\"volume\", axis=1, inplace=True)\n",
    "    df.drop(\"ticker\", axis=1, inplace=True)\n",
    "    df.reset_index(inplace=True)\n",
    "    #  Rearrange column order\n",
    "    df.drop(\"index\", axis=1, inplace=True)\n",
    "    df = df[['adjclose', 'date']]  # , 'open','high','low',\n",
    "\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "id": "9507f1ae",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_train_test_range(df, start_date_str, target_date_str):\n",
    "    query = f\"(date >= '{start_date_str}') and (date <= '{target_date_str}')\"\n",
    "    train_test_df = df.query(query).copy()\n",
    "    return train_test_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 307,
   "id": "6ea58eeb",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_display_range(df, start_date_str, target_date_str, forecast_steps):\n",
    "    #  Get full date range\n",
    "    full_range_date_str = get_biz_days_delta_date(target_date_str, forecast_steps )\n",
    "    query = f\"(date >= '{start_date_str}') and (date <= '{full_range_date_str}')\"\n",
    "    full_date_range_df = df.query(query).copy()\n",
    "    return full_date_range_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 308,
   "id": "2bf9e3ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_test_split(df, start_date_str, test_date_str, target_date_str):\n",
    "    train_query = f\"(date >= '{start_date_str}') and (date < '{test_date_str}')\"\n",
    "    train_df = df.query(train_query).copy()\n",
    "    train_df = train_df.set_index('date')\n",
    "\n",
    "    test_query = f\"(date >= '{test_date_str}') and (date <= '{target_date_str}')\"\n",
    "    test_df = df.query(test_query).copy()\n",
    "    test_df = test_df.set_index('date')\n",
    "\n",
    "    return train_df, test_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 309,
   "id": "2dd706ca",
   "metadata": {},
   "outputs": [],
   "source": [
    "def scale_data(train_df, test_df, time_steps):\n",
    "    full_scalar = MinMaxScaler(feature_range=(0, 1))\n",
    "    full_df = pd.concat((train_df, test_df), axis=0, ignore_index=True)\n",
    "    full_df_scaled = full_scalar.fit_transform(full_df)\n",
    "\n",
    "    train_scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "    train_df_scaled = train_scaler.fit_transform(train_df)\n",
    "\n",
    "    test_scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "    test_df_range = full_df[len(full_df) - len(test_df) - time_steps:]\n",
    "    test_df_scaled = test_scaler.fit_transform(test_df_range)\n",
    "\n",
    "    return full_scalar, train_df_scaled, test_df_scaled, full_df_scaled"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 310,
   "id": "cbe98398",
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_X_ys(df_scaled, time_steps, forecast_steps):\n",
    "    X = []\n",
    "    y = []\n",
    "    for i in range(time_steps, df_scaled.shape[0] - forecast_steps + 1):\n",
    "        X.append(df_scaled[i - time_steps:i])\n",
    "        y.append(df_scaled[i:i + forecast_steps])\n",
    "\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "\n",
    "    X = np.reshape(X, (X.shape[0], X.shape[1] * X.shape[2]))\n",
    "    y = np.reshape(y, (y.shape[0], y.shape[1] * y.shape[2]))\n",
    "\n",
    "    return X, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 311,
   "id": "0713036d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_X(df_scaled, time_steps):\n",
    "    X = []\n",
    "\n",
    "    for i in range(time_steps, df_scaled.shape[0] + 1):\n",
    "        X.append(df_scaled[i - time_steps:i])\n",
    "\n",
    "    X = np.array(X)\n",
    "\n",
    "    X = np.reshape(X, (X.shape[0], X.shape[1] * X.shape[2]))\n",
    "\n",
    "    return X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 312,
   "id": "4543e09d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_model( time_steps, n_forecast_steps, n_features):\n",
    "    model = Sequential()\n",
    "\n",
    "    # 1st layer with Dropout regularisation\n",
    "    # * units = add x neurons is the dimensionality of the output space\n",
    "    # * return_sequences = True to stack LSTM layers so the next LSTM layer has a three-dimensional sequence input\n",
    "    # * input_shape => Shape of the training dataset\n",
    "    input_shape = (time_steps, n_features)\n",
    "    model.add(LSTM(units=800, return_sequences=True, input_shape=input_shape))\n",
    "    # x% of the layers will be dropped\n",
    "    model.add(Dropout(0.5))\n",
    "    # 2nd LSTM layer\n",
    "    # * units = add x neurons is the dimensionality of the output space\n",
    "    # * return_sequences = True to stack LSTM layers so the next LSTM layer has a three-dimensional sequence input\n",
    "    model.add(LSTM(units=400, return_sequences=True))\n",
    "    # x% of the layers will be dropped\n",
    "    model.add(Dropout(0.5))\n",
    "    # 3rd LSTM layer\n",
    "    # * units = add x neurons is the dimensionality of the output space\n",
    "    # * return_sequences = True to stack LSTM layers so the next LSTM layer has a three-dimensional sequence input\n",
    "    model.add(LSTM(units=400, return_sequences=True))\n",
    "    # x% of the layers will be dropped\n",
    "    model.add(Dropout(0.5))\n",
    "    # 4th LSTM layer\n",
    "    # * units = add x neurons is the dimensionality of the output space\n",
    "    model.add(LSTM(units=400))\n",
    "    # 50% of the layers will be dropped\n",
    "    model.add(Dropout(0.5))\n",
    "\n",
    "    # Dense layer that specifies an output of one unit\n",
    "    model.add(Dense(units=n_forecast_steps))\n",
    "\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 313,
   "id": "a8e46f87",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_model(model, X_train, y_train, X_test, y_test, epochs, batch_size, patience):\n",
    "    early_stop = EarlyStopping(monitor='val_loss', patience=patience, mode='min', verbose=1)\n",
    "\n",
    "    model.compile(optimizer='adam', loss='mean_squared_error', metrics=[tf.keras.metrics.MeanSquaredError(name='MSE')])\n",
    "    history = model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_test, y_test), callbacks=[early_stop])\n",
    "    return history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 314,
   "id": "d11cf9cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_predictions(model, X_full):\n",
    "    full_pred_y = model.predict(X_full)\n",
    "    return full_pred_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 315,
   "id": "08d98c76",
   "metadata": {},
   "outputs": [],
   "source": [
    "def inverse_scale(full_scalar, full_pred_y):\n",
    "    full_pred_y_norm = full_scalar.inverse_transform(full_pred_y)\n",
    "    full_pred_y_norm = pd.DataFrame(full_pred_y_norm)\n",
    "\n",
    "    return full_pred_y_norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 316,
   "id": "0084de57",
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_future_predictions(pred_y_norm, time_steps):\n",
    "    future_predict = pred_y_norm.iloc[-1, 0:time_steps]\n",
    "\n",
    "    future_df = pd.DataFrame(future_predict.values, columns=['adjclose'])\n",
    "\n",
    "    return future_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 317,
   "id": "0bacb937",
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_predictions(symbol, target_date_str, actual_df, pred_y_norm, future_df):\n",
    "    plt.figure(figsize=(16, 6))\n",
    "    plt.plot(actual_df['adjclose'], color='blue', label='Actual', linewidth=0.8)\n",
    "\n",
    "    plt.plot(pred_y_norm[0], color='green', label='Predicted', linewidth=0.8)\n",
    "\n",
    "    plt.plot(future_df['adjclose'], color='red', label='Future', linewidth=0.8)\n",
    "\n",
    "    plt.axvline(x=len(pred_y_norm), color='r', linewidth=0.4)\n",
    "    plt.axvline(x=len(actual_df) - 20, color='r', linewidth=0.4)\n",
    "\n",
    "    plt.xlabel('Time')\n",
    "    plt.ylabel('Price')\n",
    "    plt.legend()\n",
    "    plt.title('Prediction')\n",
    "\n",
    "    #  Show plot\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 318,
   "id": "fe17e4dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "def run(cfg):\n",
    "    symbol = cfg[\"symbol\"]\n",
    "    total_days = cfg[\"total_days\"]\n",
    "    target_date_str = cfg[\"target_date_str\"]\n",
    "    split_ratio = cfg[\"split_ratio\"]\n",
    "    time_steps = cfg[\"time_steps\"]\n",
    "    forecast_steps = cfg[\"forecast_steps\"]\n",
    "    target_date_str = cfg[\"target_date_str\"]\n",
    "    batch_size = cfg[\"batch_size\"]\n",
    "    epochs = cfg[\"epochs\"]\n",
    "    patience = cfg[\"patience\"]\n",
    "    n_features = 1\n",
    "    \n",
    "    today = datetime.date.today()\n",
    "    today_str = today.strftime(\"%Y-%m-%d\")\n",
    "\n",
    "\n",
    "    df = load_price_data(symbol, None, today_str)\n",
    "    df = cleanup_daily_file(df)\n",
    "\n",
    "    #  calculate start date\n",
    "    start_date_str = get_biz_days_delta_date(target_date_str, -total_days)\n",
    "  \n",
    "    train_test_df = get_train_test_range(df, start_date_str, target_date_str)\n",
    "    display_df = get_display_range(df, start_date_str, target_date_str, forecast_steps)\n",
    "   \n",
    "    #  Calculate test days\n",
    "    test_days = int(total_days * split_ratio)\n",
    "    test_date_str = get_biz_days_delta_date(target_date_str, -test_days)\n",
    "\n",
    "    train_df, test_df = train_test_split(train_test_df, start_date_str, test_date_str, target_date_str)\n",
    "\n",
    "    full_scalar, train_df_scaled, test_df_scaled, full_df_scaled = scale_data(train_df, test_df, time_steps)\n",
    "\n",
    "    #  Create X's and y's\n",
    "    X_train, y_train = create_X_ys(train_df_scaled, time_steps, forecast_steps)\n",
    "    X_test, y_test = create_X_ys(test_df_scaled, time_steps, forecast_steps)\n",
    "    X_full = create_X(full_df_scaled, time_steps)\n",
    "\n",
    "    print('Building model')\n",
    "    model = build_model(time_steps, forecast_steps, n_features)\n",
    "    print(model.summary())\n",
    "    \n",
    "\n",
    "    train_model(model, X_train, y_train, X_test, y_test, epochs, batch_size, patience)\n",
    "\n",
    "    #  Create predictions\n",
    "    full_pred_y = create_predictions(model, X_full)\n",
    "    full_pred_y_norm = inverse_scale(full_scalar, full_pred_y)\n",
    "\n",
    "    #  Concat train and test predictions\n",
    "    full_pred_y_norm.index += time_steps - 1\n",
    "\n",
    "    train_test_df_display = train_test_df.copy()\n",
    "    train_test_df_display.drop('date', axis=1, inplace=True)\n",
    "    train_test_df_display.reset_index(drop=True, inplace=True)\n",
    "\n",
    "    future_df = create_future_predictions(full_pred_y_norm, time_steps)\n",
    "    future_df.index += len(train_test_df_display) - 2\n",
    "\n",
    "    full_display_df = display_df.copy()\n",
    "    full_display_df.drop('date', axis=1, inplace=True)\n",
    "    full_display_df.reset_index(drop=True, inplace=True)\n",
    "    \n",
    "    plot_predictions(symbol, target_date_str, full_display_df, full_pred_y_norm, future_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 319,
   "id": "3264d7c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Base configuration\n",
    "cfg = {\"symbol\": \"TSLA\",\n",
    "       \"target_date_str\": '2021-12-01',\n",
    "       \"total_days\": 600,\n",
    "       \"split_ratio\": 0.2,\n",
    "       \"epochs\": 300,\n",
    "       \"batch_size\": 32,\n",
    "       \"time_steps\": 30,\n",
    "       \"forecast_steps\": 10,\n",
    "       \"patience\": 50}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 320,
   "id": "83a9143f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Processing AAPL\n",
      "Building model\n",
      "Model: \"sequential_5\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " lstm_20 (LSTM)              (None, 30, 800)           2566400   \n",
      "                                                                 \n",
      " dropout_20 (Dropout)        (None, 30, 800)           0         \n",
      "                                                                 \n",
      " lstm_21 (LSTM)              (None, 30, 400)           1921600   \n",
      "                                                                 \n",
      " dropout_21 (Dropout)        (None, 30, 400)           0         \n",
      "                                                                 \n",
      " lstm_22 (LSTM)              (None, 30, 400)           1281600   \n",
      "                                                                 \n",
      " dropout_22 (Dropout)        (None, 30, 400)           0         \n",
      "                                                                 \n",
      " lstm_23 (LSTM)              (None, 400)               1281600   \n",
      "                                                                 \n",
      " dropout_23 (Dropout)        (None, 400)               0         \n",
      "                                                                 \n",
      " dense_5 (Dense)             (None, 10)                4010      \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 7,055,210\n",
      "Trainable params: 7,055,210\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n",
      "None\n",
      "Epoch 1/300\n",
      "14/14 [==============================] - 12s 301ms/step - loss: 0.2157 - MSE: 0.2157 - val_loss: 0.0618 - val_MSE: 0.0618\n",
      "Epoch 2/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0400 - MSE: 0.0400 - val_loss: 0.0438 - val_MSE: 0.0438\n",
      "Epoch 3/300\n",
      "14/14 [==============================] - 3s 263ms/step - loss: 0.0223 - MSE: 0.0223 - val_loss: 0.0260 - val_MSE: 0.0260\n",
      "Epoch 4/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0192 - MSE: 0.0192 - val_loss: 0.0315 - val_MSE: 0.0315\n",
      "Epoch 5/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0166 - MSE: 0.0166 - val_loss: 0.0272 - val_MSE: 0.0272\n",
      "Epoch 6/300\n",
      "14/14 [==============================] - 3s 267ms/step - loss: 0.0158 - MSE: 0.0158 - val_loss: 0.0316 - val_MSE: 0.0316\n",
      "Epoch 7/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0149 - MSE: 0.0149 - val_loss: 0.0233 - val_MSE: 0.0233\n",
      "Epoch 8/300\n",
      "14/14 [==============================] - 4s 268ms/step - loss: 0.0128 - MSE: 0.0128 - val_loss: 0.0263 - val_MSE: 0.0263\n",
      "Epoch 9/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0140 - MSE: 0.0140 - val_loss: 0.0237 - val_MSE: 0.0237\n",
      "Epoch 10/300\n",
      "14/14 [==============================] - 3s 267ms/step - loss: 0.0120 - MSE: 0.0120 - val_loss: 0.0222 - val_MSE: 0.0222\n",
      "Epoch 11/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0115 - MSE: 0.0115 - val_loss: 0.0198 - val_MSE: 0.0198\n",
      "Epoch 12/300\n",
      "14/14 [==============================] - 3s 265ms/step - loss: 0.0116 - MSE: 0.0116 - val_loss: 0.0197 - val_MSE: 0.0197\n",
      "Epoch 13/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0112 - MSE: 0.0112 - val_loss: 0.0207 - val_MSE: 0.0207\n",
      "Epoch 14/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0103 - MSE: 0.0103 - val_loss: 0.0314 - val_MSE: 0.0314\n",
      "Epoch 15/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0125 - MSE: 0.0125 - val_loss: 0.0212 - val_MSE: 0.0212\n",
      "Epoch 16/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0110 - MSE: 0.0110 - val_loss: 0.0198 - val_MSE: 0.0198\n",
      "Epoch 17/300\n",
      "14/14 [==============================] - 4s 267ms/step - loss: 0.0099 - MSE: 0.0099 - val_loss: 0.0203 - val_MSE: 0.0203\n",
      "Epoch 18/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0112 - MSE: 0.0112 - val_loss: 0.0198 - val_MSE: 0.0198\n",
      "Epoch 19/300\n",
      "14/14 [==============================] - 3s 263ms/step - loss: 0.0097 - MSE: 0.0097 - val_loss: 0.0196 - val_MSE: 0.0196\n",
      "Epoch 20/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0100 - MSE: 0.0100 - val_loss: 0.0187 - val_MSE: 0.0187\n",
      "Epoch 21/300\n",
      "14/14 [==============================] - 3s 255ms/step - loss: 0.0092 - MSE: 0.0092 - val_loss: 0.0155 - val_MSE: 0.0155\n",
      "Epoch 22/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0104 - MSE: 0.0104 - val_loss: 0.0198 - val_MSE: 0.0198\n",
      "Epoch 23/300\n",
      "14/14 [==============================] - 4s 268ms/step - loss: 0.0112 - MSE: 0.0112 - val_loss: 0.0151 - val_MSE: 0.0151\n",
      "Epoch 24/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0084 - MSE: 0.0084 - val_loss: 0.0157 - val_MSE: 0.0157\n",
      "Epoch 25/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0075 - MSE: 0.0075 - val_loss: 0.0153 - val_MSE: 0.0153\n",
      "Epoch 26/300\n",
      "14/14 [==============================] - 4s 269ms/step - loss: 0.0079 - MSE: 0.0079 - val_loss: 0.0152 - val_MSE: 0.0152\n",
      "Epoch 27/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0077 - MSE: 0.0077 - val_loss: 0.0162 - val_MSE: 0.0162\n",
      "Epoch 28/300\n",
      "14/14 [==============================] - 4s 269ms/step - loss: 0.0083 - MSE: 0.0083 - val_loss: 0.0136 - val_MSE: 0.0136\n",
      "Epoch 29/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0077 - MSE: 0.0077 - val_loss: 0.0161 - val_MSE: 0.0161\n",
      "Epoch 30/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0090 - MSE: 0.0090 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 31/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0078 - MSE: 0.0078 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 32/300\n",
      "14/14 [==============================] - 3s 263ms/step - loss: 0.0073 - MSE: 0.0073 - val_loss: 0.0122 - val_MSE: 0.0122\n",
      "Epoch 33/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0072 - MSE: 0.0072 - val_loss: 0.0146 - val_MSE: 0.0146\n",
      "Epoch 34/300\n",
      "14/14 [==============================] - 3s 263ms/step - loss: 0.0076 - MSE: 0.0076 - val_loss: 0.0142 - val_MSE: 0.0142\n",
      "Epoch 35/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0070 - MSE: 0.0070 - val_loss: 0.0133 - val_MSE: 0.0133\n",
      "Epoch 36/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0069 - MSE: 0.0069 - val_loss: 0.0129 - val_MSE: 0.0129\n",
      "Epoch 37/300\n",
      "14/14 [==============================] - 3s 33ms/step - loss: 0.0075 - MSE: 0.0075 - val_loss: 0.0134 - val_MSE: 0.0134\n",
      "Epoch 38/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0067 - MSE: 0.0067 - val_loss: 0.0127 - val_MSE: 0.0127\n",
      "Epoch 39/300\n",
      "14/14 [==============================] - 3s 261ms/step - loss: 0.0070 - MSE: 0.0070 - val_loss: 0.0125 - val_MSE: 0.0125\n",
      "Epoch 40/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0067 - MSE: 0.0067 - val_loss: 0.0115 - val_MSE: 0.0115\n",
      "Epoch 41/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0075 - MSE: 0.0075 - val_loss: 0.0151 - val_MSE: 0.0151\n",
      "Epoch 42/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0071 - MSE: 0.0071 - val_loss: 0.0136 - val_MSE: 0.0136\n",
      "Epoch 43/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0061 - MSE: 0.0061 - val_loss: 0.0124 - val_MSE: 0.0124\n",
      "Epoch 44/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0064 - MSE: 0.0064 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 45/300\n",
      "14/14 [==============================] - 4s 269ms/step - loss: 0.0057 - MSE: 0.0057 - val_loss: 0.0117 - val_MSE: 0.0117\n",
      "Epoch 46/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0060 - MSE: 0.0060 - val_loss: 0.0124 - val_MSE: 0.0124\n",
      "Epoch 47/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0064 - MSE: 0.0064 - val_loss: 0.0112 - val_MSE: 0.0112\n",
      "Epoch 48/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0064 - MSE: 0.0064 - val_loss: 0.0133 - val_MSE: 0.0133\n",
      "Epoch 49/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0065 - MSE: 0.0065 - val_loss: 0.0125 - val_MSE: 0.0125\n",
      "Epoch 50/300\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "14/14 [==============================] - 4s 270ms/step - loss: 0.0060 - MSE: 0.0060 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 51/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0057 - MSE: 0.0057 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 52/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0060 - MSE: 0.0060 - val_loss: 0.0123 - val_MSE: 0.0123\n",
      "Epoch 53/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0058 - MSE: 0.0058 - val_loss: 0.0130 - val_MSE: 0.0130\n",
      "Epoch 54/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0057 - MSE: 0.0057 - val_loss: 0.0118 - val_MSE: 0.0118\n",
      "Epoch 55/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0057 - MSE: 0.0057 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 56/300\n",
      "14/14 [==============================] - 3s 267ms/step - loss: 0.0069 - MSE: 0.0069 - val_loss: 0.0113 - val_MSE: 0.0113\n",
      "Epoch 57/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0066 - MSE: 0.0066 - val_loss: 0.0116 - val_MSE: 0.0116\n",
      "Epoch 58/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0056 - MSE: 0.0056 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 59/300\n",
      "14/14 [==============================] - 3s 34ms/step - loss: 0.0057 - MSE: 0.0057 - val_loss: 0.0128 - val_MSE: 0.0128\n",
      "Epoch 60/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0066 - MSE: 0.0066 - val_loss: 0.0128 - val_MSE: 0.0128\n",
      "Epoch 61/300\n",
      "14/14 [==============================] - 4s 273ms/step - loss: 0.0058 - MSE: 0.0058 - val_loss: 0.0127 - val_MSE: 0.0127\n",
      "Epoch 62/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0053 - MSE: 0.0053 - val_loss: 0.0124 - val_MSE: 0.0124\n",
      "Epoch 63/300\n",
      "14/14 [==============================] - 3s 261ms/step - loss: 0.0057 - MSE: 0.0057 - val_loss: 0.0118 - val_MSE: 0.0118\n",
      "Epoch 64/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0055 - MSE: 0.0055 - val_loss: 0.0115 - val_MSE: 0.0115\n",
      "Epoch 65/300\n",
      "14/14 [==============================] - 3s 265ms/step - loss: 0.0051 - MSE: 0.0051 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 66/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0052 - MSE: 0.0052 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 67/300\n",
      "14/14 [==============================] - 4s 269ms/step - loss: 0.0049 - MSE: 0.0049 - val_loss: 0.0134 - val_MSE: 0.0134\n",
      "Epoch 68/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0054 - MSE: 0.0054 - val_loss: 0.0123 - val_MSE: 0.0123\n",
      "Epoch 69/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0054 - MSE: 0.0054 - val_loss: 0.0112 - val_MSE: 0.0112\n",
      "Epoch 70/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0053 - MSE: 0.0053 - val_loss: 0.0124 - val_MSE: 0.0124\n",
      "Epoch 71/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0055 - MSE: 0.0055 - val_loss: 0.0132 - val_MSE: 0.0132\n",
      "Epoch 72/300\n",
      "14/14 [==============================] - 3s 264ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0117 - val_MSE: 0.0117\n",
      "Epoch 73/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0049 - MSE: 0.0049 - val_loss: 0.0144 - val_MSE: 0.0144\n",
      "Epoch 74/300\n",
      "14/14 [==============================] - 4s 267ms/step - loss: 0.0055 - MSE: 0.0055 - val_loss: 0.0133 - val_MSE: 0.0133\n",
      "Epoch 75/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0058 - MSE: 0.0058 - val_loss: 0.0168 - val_MSE: 0.0168\n",
      "Epoch 76/300\n",
      "14/14 [==============================] - 3s 261ms/step - loss: 0.0056 - MSE: 0.0056 - val_loss: 0.0142 - val_MSE: 0.0142\n",
      "Epoch 77/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0052 - MSE: 0.0052 - val_loss: 0.0147 - val_MSE: 0.0147\n",
      "Epoch 78/300\n",
      "14/14 [==============================] - 4s 267ms/step - loss: 0.0049 - MSE: 0.0049 - val_loss: 0.0128 - val_MSE: 0.0128\n",
      "Epoch 79/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0050 - MSE: 0.0050 - val_loss: 0.0129 - val_MSE: 0.0129\n",
      "Epoch 80/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0051 - MSE: 0.0051 - val_loss: 0.0113 - val_MSE: 0.0113\n",
      "Epoch 81/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0053 - MSE: 0.0053 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 82/300\n",
      "14/14 [==============================] - 0s 34ms/step - loss: 0.0049 - MSE: 0.0049 - val_loss: 0.0118 - val_MSE: 0.0118\n",
      "Epoch 83/300\n",
      "14/14 [==============================] - 3s 261ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0123 - val_MSE: 0.0123\n",
      "Epoch 84/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0130 - val_MSE: 0.0130\n",
      "Epoch 85/300\n",
      "14/14 [==============================] - 3s 258ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0123 - val_MSE: 0.0123\n",
      "Epoch 86/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0127 - val_MSE: 0.0127\n",
      "Epoch 87/300\n",
      "14/14 [==============================] - 3s 259ms/step - loss: 0.0047 - MSE: 0.0047 - val_loss: 0.0193 - val_MSE: 0.0193\n",
      "Epoch 88/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0048 - MSE: 0.0048 - val_loss: 0.0133 - val_MSE: 0.0133\n",
      "Epoch 89/300\n",
      "14/14 [==============================] - 3s 262ms/step - loss: 0.0051 - MSE: 0.0051 - val_loss: 0.0140 - val_MSE: 0.0140\n",
      "Epoch 90/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0122 - val_MSE: 0.0122\n",
      "Epoch 91/300\n",
      "14/14 [==============================] - 3s 264ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 92/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0040 - MSE: 0.0040 - val_loss: 0.0148 - val_MSE: 0.0148\n",
      "Epoch 93/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0139 - val_MSE: 0.0139\n",
      "Epoch 94/300\n",
      "14/14 [==============================] - 3s 264ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0109 - val_MSE: 0.0109\n",
      "Epoch 95/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0126 - val_MSE: 0.0126\n",
      "Epoch 96/300\n",
      "14/14 [==============================] - 4s 268ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0135 - val_MSE: 0.0135\n",
      "Epoch 97/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0131 - val_MSE: 0.0131\n",
      "Epoch 98/300\n",
      "14/14 [==============================] - 3s 267ms/step - loss: 0.0044 - MSE: 0.0044 - val_loss: 0.0152 - val_MSE: 0.0152\n",
      "Epoch 99/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0042 - MSE: 0.0042 - val_loss: 0.0124 - val_MSE: 0.0124\n",
      "Epoch 100/300\n",
      "14/14 [==============================] - 3s 265ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0125 - val_MSE: 0.0125\n",
      "Epoch 101/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0038 - MSE: 0.0038 - val_loss: 0.0117 - val_MSE: 0.0117\n",
      "Epoch 102/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0138 - val_MSE: 0.0138\n",
      "Epoch 103/300\n",
      "14/14 [==============================] - 3s 262ms/step - loss: 0.0042 - MSE: 0.0042 - val_loss: 0.0121 - val_MSE: 0.0121\n",
      "Epoch 104/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0047 - MSE: 0.0047 - val_loss: 0.0134 - val_MSE: 0.0134\n",
      "Epoch 105/300\n",
      "14/14 [==============================] - 3s 262ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0115 - val_MSE: 0.0115\n",
      "Epoch 106/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0042 - MSE: 0.0042 - val_loss: 0.0128 - val_MSE: 0.0128\n",
      "Epoch 107/300\n",
      "14/14 [==============================] - 3s 267ms/step - loss: 0.0036 - MSE: 0.0036 - val_loss: 0.0142 - val_MSE: 0.0142\n",
      "Epoch 108/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 109/300\n",
      "14/14 [==============================] - 3s 267ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0130 - val_MSE: 0.0130\n",
      "Epoch 110/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0049 - MSE: 0.0049 - val_loss: 0.0131 - val_MSE: 0.0131\n",
      "Epoch 111/300\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "14/14 [==============================] - 3s 264ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0143 - val_MSE: 0.0143\n",
      "Epoch 112/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0115 - val_MSE: 0.0115\n",
      "Epoch 113/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0114 - val_MSE: 0.0114\n",
      "Epoch 114/300\n",
      "14/14 [==============================] - 3s 258ms/step - loss: 0.0047 - MSE: 0.0047 - val_loss: 0.0137 - val_MSE: 0.0137\n",
      "Epoch 115/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0129 - val_MSE: 0.0129\n",
      "Epoch 116/300\n",
      "14/14 [==============================] - 3s 266ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0129 - val_MSE: 0.0129\n",
      "Epoch 117/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0120 - val_MSE: 0.0120\n",
      "Epoch 118/300\n",
      "14/14 [==============================] - 3s 263ms/step - loss: 0.0042 - MSE: 0.0042 - val_loss: 0.0114 - val_MSE: 0.0114\n",
      "Epoch 119/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0040 - MSE: 0.0040 - val_loss: 0.0117 - val_MSE: 0.0117\n",
      "Epoch 120/300\n",
      "14/14 [==============================] - 3s 262ms/step - loss: 0.0039 - MSE: 0.0039 - val_loss: 0.0121 - val_MSE: 0.0121\n",
      "Epoch 121/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0040 - MSE: 0.0040 - val_loss: 0.0109 - val_MSE: 0.0109\n",
      "Epoch 122/300\n",
      "14/14 [==============================] - 4s 275ms/step - loss: 0.0037 - MSE: 0.0037 - val_loss: 0.0129 - val_MSE: 0.0129\n",
      "Epoch 123/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0113 - val_MSE: 0.0113\n",
      "Epoch 124/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0046 - MSE: 0.0046 - val_loss: 0.0121 - val_MSE: 0.0121\n",
      "Epoch 125/300\n",
      "14/14 [==============================] - 3s 263ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0143 - val_MSE: 0.0143\n",
      "Epoch 126/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0044 - MSE: 0.0044 - val_loss: 0.0123 - val_MSE: 0.0123\n",
      "Epoch 127/300\n",
      "14/14 [==============================] - 3s 260ms/step - loss: 0.0038 - MSE: 0.0038 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 128/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0117 - val_MSE: 0.0117\n",
      "Epoch 129/300\n",
      "14/14 [==============================] - 3s 262ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0136 - val_MSE: 0.0136\n",
      "Epoch 130/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0042 - MSE: 0.0042 - val_loss: 0.0137 - val_MSE: 0.0137\n",
      "Epoch 131/300\n",
      "14/14 [==============================] - 3s 265ms/step - loss: 0.0044 - MSE: 0.0044 - val_loss: 0.0124 - val_MSE: 0.0124\n",
      "Epoch 132/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0045 - MSE: 0.0045 - val_loss: 0.0126 - val_MSE: 0.0126\n",
      "Epoch 133/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0178 - val_MSE: 0.0178\n",
      "Epoch 134/300\n",
      "14/14 [==============================] - 4s 33ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 135/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0039 - MSE: 0.0039 - val_loss: 0.0121 - val_MSE: 0.0121\n",
      "Epoch 136/300\n",
      "14/14 [==============================] - 3s 261ms/step - loss: 0.0034 - MSE: 0.0034 - val_loss: 0.0145 - val_MSE: 0.0145\n",
      "Epoch 137/300\n",
      "14/14 [==============================] - 0s 32ms/step - loss: 0.0038 - MSE: 0.0038 - val_loss: 0.0112 - val_MSE: 0.0112\n",
      "Epoch 138/300\n",
      "14/14 [==============================] - 3s 261ms/step - loss: 0.0044 - MSE: 0.0044 - val_loss: 0.0110 - val_MSE: 0.0110\n",
      "Epoch 139/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0035 - MSE: 0.0035 - val_loss: 0.0118 - val_MSE: 0.0118\n",
      "Epoch 140/300\n",
      "14/14 [==============================] - 3s 260ms/step - loss: 0.0043 - MSE: 0.0043 - val_loss: 0.0121 - val_MSE: 0.0121\n",
      "Epoch 141/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0044 - MSE: 0.0044 - val_loss: 0.0158 - val_MSE: 0.0158\n",
      "Epoch 142/300\n",
      "14/14 [==============================] - 3s 260ms/step - loss: 0.0041 - MSE: 0.0041 - val_loss: 0.0109 - val_MSE: 0.0109\n",
      "Epoch 143/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0040 - MSE: 0.0040 - val_loss: 0.0117 - val_MSE: 0.0117\n",
      "Epoch 144/300\n",
      "14/14 [==============================] - 0s 33ms/step - loss: 0.0037 - MSE: 0.0037 - val_loss: 0.0119 - val_MSE: 0.0119\n",
      "Epoch 144: early stopping\n"
     ]
    },
    {
     "ename": "OSError",
     "evalue": "[Errno 22] Invalid argument: 'C:\\\\\\\\de\\x0b\\trading\\tradesystem1\\\\info\\\\output\\\\AAPL_2021-12-01_tf_prediction.png'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mOSError\u001b[0m                                   Traceback (most recent call last)",
      "\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_47288/4104780969.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      8\u001b[0m     \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mf\"Processing {symbol}\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      9\u001b[0m     \u001b[0mcfg\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'symbol'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msymbol\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 10\u001b[1;33m     \u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcfg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     11\u001b[0m     \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     12\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_47288/2778299243.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(cfg)\u001b[0m\n\u001b[0;32m     63\u001b[0m     \u001b[0mfull_display_df\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdrop\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minplace\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     64\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 65\u001b[1;33m     \u001b[0mplot_predictions\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msymbol\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtarget_date_str\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfull_display_df\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfull_pred_y_norm\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfuture_df\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_47288/413499503.py\u001b[0m in \u001b[0;36mplot_predictions\u001b[1;34m(symbol, target_date_str, actual_df, pred_y_norm, future_df)\u001b[0m\n\u001b[0;32m     18\u001b[0m     \u001b[0mfile_name\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34mf\"{symbol}_{target_date_str}_tf_prediction.png\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     19\u001b[0m     \u001b[0mfile_path\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'C:\\\\\\de\\v\\trading\\tradesystem1\\\\info\\\\output'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfile_name\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 20\u001b[1;33m     \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfile_path\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36msavefig\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m    956\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    957\u001b[0m     \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgcf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 958\u001b[1;33m     \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    959\u001b[0m     \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw_idle\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m   \u001b[1;31m# need this if 'transparent=True' to reset colors\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    960\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\figure.py\u001b[0m in \u001b[0;36msavefig\u001b[1;34m(self, fname, transparent, **kwargs)\u001b[0m\n\u001b[0;32m   3017\u001b[0m                         ax.patch._cm_set(facecolor='none', edgecolor='none'))\n\u001b[0;32m   3018\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3019\u001b[1;33m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   3020\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   3021\u001b[0m     def ginput(self, n=1, timeout=30, show_clicks=True,\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[1;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)\u001b[0m\n\u001b[0;32m   2317\u001b[0m                 \u001b[1;31m# force the figure dpi to 72), so we need to set it again here.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2318\u001b[0m                 \u001b[1;32mwith\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setattr_cm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdpi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2319\u001b[1;33m                     result = print_method(\n\u001b[0m\u001b[0;32m   2320\u001b[0m                         \u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2321\u001b[0m                         \u001b[0mfacecolor\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfacecolor\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\backend_bases.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m   1646\u001b[0m             \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1647\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1648\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1649\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1650\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\_api\\deprecation.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*inner_args, **inner_kwargs)\u001b[0m\n\u001b[0;32m    410\u001b[0m                          \u001b[1;32melse\u001b[0m \u001b[0mdeprecation_addendum\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    411\u001b[0m                 **kwargs)\n\u001b[1;32m--> 412\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0minner_args\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0minner_kwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    413\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    414\u001b[0m     \u001b[0mDECORATORS\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mwrapper\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdecorator\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\backends\\backend_agg.py\u001b[0m in \u001b[0;36mprint_png\u001b[1;34m(self, filename_or_obj, metadata, pil_kwargs, *args)\u001b[0m\n\u001b[0;32m    539\u001b[0m         \"\"\"\n\u001b[0;32m    540\u001b[0m         \u001b[0mFigureCanvasAgg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 541\u001b[1;33m         mpl.image.imsave(\n\u001b[0m\u001b[0;32m    542\u001b[0m             \u001b[0mfilename_or_obj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuffer_rgba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"png\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0morigin\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m\"upper\"\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    543\u001b[0m             dpi=self.figure.dpi, metadata=metadata, pil_kwargs=pil_kwargs)\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36mimsave\u001b[1;34m(fname, arr, vmin, vmax, cmap, format, origin, dpi, metadata, pil_kwargs)\u001b[0m\n\u001b[0;32m   1673\u001b[0m         \u001b[0mpil_kwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"format\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1674\u001b[0m         \u001b[0mpil_kwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"dpi\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mdpi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdpi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1675\u001b[1;33m         \u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msave\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mpil_kwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1676\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1677\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\anaconda3\\envs\\tradesystem1\\lib\\site-packages\\PIL\\Image.py\u001b[0m in \u001b[0;36msave\u001b[1;34m(self, fp, format, **params)\u001b[0m\n\u001b[0;32m   2235\u001b[0m                 \u001b[0mfp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbuiltins\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"r+b\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2236\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2237\u001b[1;33m                 \u001b[0mfp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbuiltins\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"w+b\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2238\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2239\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mOSError\u001b[0m: [Errno 22] Invalid argument: 'C:\\\\\\\\de\\x0b\\trading\\tradesystem1\\\\info\\\\output\\\\AAPL_2021-12-01_tf_prediction.png'"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7MAAAGDCAYAAAD5+0frAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACKWUlEQVR4nOzddXgVRxfH8e8kwd09uLs7FEqBFi+F4l5oC6Wl9lKFQpUKBVoo2gLFWqC4u7u7uwW3EEiy7x+TkIQECJDkJuH3eZ48uTs7u/fspcK5M3PGOI6DiIiIiIiISEzi5uoARERERERERJ6UklkRERERERGJcZTMioiIiIiISIyjZFZERERERERiHCWzIiIiIiIiEuMomRUREREREZEYR8msiIhINGOM+csY83XA68rGmP1PeZ8/jDFfRGx0IiIi0YOSWRERkadkjDlmjPE2xtw0xpwPSEITR+R7OI6z0nGcvOGIpZ0xZtUD177pOE7fiIxHREQkulAyKyIi8mzqOY6TGCgBlAI+D37SGOPhkqhERERiOSWzIiIiEcBxnNPAXKCQMcYxxnQ1xhwEDgIYY+oaY7YZY64aY9YYY4oEXmuMKW6M2WKMuWGMmQTED3buBWPMqWDHWYwxU40xXsaYS8aY34wx+YE/gPIBo8RXA/ren64ccPyGMeaQMeayMWaGMSZjsHOOMeZNY8zBgBh/N8aYSPvAREREnpGSWRERkQhgjMkCvAJsDWhqCJQFChhjigOjgC5AKmAoMMMYE88YExeYBowFUgL/Ao0f8h7uwCzgOJANyARMdBxnL/AmsNZxnMSO4yQP49rqwHdAUyBDwD0mPtCtLlAaKBLQr9aTfQoiIiJRR8msiIjIs5kWMBK6ClgOfBvQ/p3jOJcdx/EGOgNDHcdZ7ziOn+M4owEfoFzATxzgV8dx7jmOMxnY+JD3KgNkBD5yHOeW4zh3HMdZ9ZC+D2oJjHIcZ4vjOD7AJ9iR3GzB+nzvOM5Vx3FOAEuBYuG8t4iISJTTOh4REZFn09BxnEXBGwJm554M1pQVaGuMeSdYW1xsYuoApx3HcYKdO/6Q98oCHHccx/cp4swIbAk8cBznpjHmEnZ091hA87lg/W8DEVrMSkREJCJpZFZERCRyBE9OTwLfOI6TPNhPQsdxJgBngUwPrE/1fMg9TwKeDykq5YTRFtwZbFINgDEmEXbK8+nHPYiIiEh0pGRWREQk8g0H3jTGlDVWImNMHWNMEmAt4At0N8bEMca8ip1OHJYN2OT3+4B7xDfGVAw4dx7IHLAGNywTgPbGmGLGmHjY6dDrHcc5FkHPKCIiEqWUzIqIiEQyx3E2AW8AvwFXgENAu4Bzd4FXA44vA68DUx9yHz+gHpALOAGcCugPsATYDZwzxlwM49pFwBfAFGxCnBNoFgGPJyIi4hIm5BIdERERERERkehPI7MiIiIiIiIS4yiZFRERERERkRhHyayIiIiIiIjEOEpmRUREREREJMZRMisiIiIiIiIxTlibrscYqVOndrJly+bqMERERERE5Hlx+7b9nTBhzH6PGGLz5s0XHcdJE9a5GJ3MZsuWjU2bNrk6DBEREREReV5s3mx/lywZs98jhjDGHH/YOU0zFhERERERkRhHyayIiIiIiIjEOEpmRUREREREJMaJ0Wtmw3Lv3j1OnTrFnTt3XB1KjBY/fnwyZ85MnDhxXB2KiIiIiIhIKLEumT116hRJkiQhW7ZsGGNcHU6M5DgOly5d4tSpU2TPnt3V4YiIiIiIiIQS66YZ37lzh1SpUimRfQbGGFKlSqXRbRERERERibZiXTILKJGNAPoMRUREREQkOou0ZNYYM8oYc8EYsytYWzFjzDpjzDZjzCZjTJmAdmOMGWiMOWSM2WGMKRFZcUWVadOmYYxh3759j+z366+/cjtwU+Sn8Ndff9GtW7envl5ERERERCQmisyR2b+A2g+09QO+chynGPBlwDHAy0DugJ/OwJBIjCtKTJgwgUqVKjFhwoRH9nvWZFZEREREROR5FGnJrOM4K4DLDzYDSQNeJwPOBLxuAIxxrHVAcmNMhsiKLbLdvHmTVatWMXLkSCZOnAiAn58fH374IYUKFaJIkSIMGjSIgQMHcubMGapVq0a1atUASJw48f37TJ48mXbt2gEwc+ZMypYtS/HixalRowbnz5+P8ucSERERERGJLqK6mvF7wHxjzE/YRLpCQHsm4GSwfqcC2s5GaXQRZPr06dSuXZs8efKQKlUqNm/ezIYNGzh27Bjbtm3Dw8ODy5cvkzJlSn755ReWLl1K6tSpH3nPSpUqsW7dOowxjBgxgn79+vHzzz9H0ROJiIiIiIhEL1GdzL4F9HAcZ4oxpikwEqjxJDcwxnTGTkXG09Pzsf1r14aLF58i0odInRrmzXt0nwkTJvDuu+8C0KxZMyZMmMDRo0d588038fCwH3nKlCmf6H1PnTrF66+/ztmzZ7l79662zBERERERkedaVCezbYF3A17/C4wIeH0ayBKsX+aAtlAcxxkGDAMoVaqU87g3fFziGdEuX77MkiVL2LlzJ8YY/Pz8MMZQunTpcF0fvIpw8K1x3nnnHd5//33q16/PsmXL6N27d0SHLiIiIiIisZTjQMOGMH160PG338Jnn7k0rGcS1VvznAGqBryuDhwMeD0DaBNQ1bgccM1xnBg5xXjy5Mm0bt2a48ePc+zYMU6ePEn27NkpWrQoQ4cOxdfXF7BJL0CSJEm4cePG/evTpUvH3r178ff357///rvffu3aNTJlygTA6NGjo/CJREREREQkprtyBWbOhMDas1euwJIlro3pWUXm1jwTgLVAXmPMKWNMR+AN4GdjzHbgWwKmCwNzgCPAIWA48HZkxRXZJkyYQKNGjUK0NW7cmLNnz+Lp6UmRIkUoWrQo48ePB6Bz587Url37fgGo77//nrp161KhQgUyZAiqgdW7d2+aNGlCyZIlH7u+VkREREREJLjjx+1o7IEDQcfhWLUZrRnHeexM3WirVKlSzqZNm0K07d27l/z587soothFn6WIiIiIyAM2b7a/S5aMUe8xbRq0aQNDh0Lz5na68datEN1XLxpjNjuOUyqsc1E9zVhERERERESi2PHj8OKLsG+fPT5xIuaPzCqZFRERERERieWOH7c7vezda4+VzIqIiIiIiEi0d+IEvPACHDlij48fh6xZXRrSM1MyKyIiIiIiEsudPAnZs4O/P/j52ePMmV0d1bNRMisiIiIiIhLL3bsHcePahPbQIbhzBxIkcHVUz8bD1QGIiIiIiIhI5Lhzx47EBiauDRvCqFE2sY3pNDIbCdzd3SlWrBiFChWiSZMm3A7cmfgptGvXjsmTJwPQqVMn9uzZ89C+y5YtY82aNU/8HtmyZePixYtPHaOIiIiIiERP77wDdeoEFXtq0gQmTYIsWVwbV0RQMhsJEiRIwLZt29i1axdx48bljz/+CHHe19f3qe47YsQIChQo8NDzT5vMioiIiIhI7LRnD9Svb4s/AcSPb/eZjemVjEHJbKSrXLkyhw4dYtmyZVSuXJn69etToEAB/Pz8+OijjyhdujRFihRh6NChADiOQ7du3cibNy81atTgwoUL9+/1wgsvsGnTJgDmzZtHiRIlKFq0KC+++CLHjh3jjz/+oH///hQrVoyVK1fi5eVF48aNKV26NKVLl2b16tUAXLp0iZo1a1KwYEE6deqE4zhR/8GIiIiIiEiku30b3n8funQJavvkE9sW02nNbCTy9fVl7ty51K5dG4AtW7awa9cusmfPzrBhw0iWLBkbN27Ex8eHihUrUrNmTbZu3cr+/fvZs2cP58+fp0CBAnTo0CHEfb28vHjjjTdYsWIF2bNn5/Lly6RMmZI333yTxIkT8+GHHwLQokULevToQaVKlThx4gS1atVi7969fPXVV1SqVIkvv/yS2bNnM3LkyCj/bEREREREJHJdugQpU4ZuT5rU/sR0sT6Zrf13bS7ejrj1oKkTpmZeq3mP7OPt7U2xYsUAOzLbsWNH1qxZQ5kyZciePTsACxYsYMeOHffXw167do2DBw+yYsUKmjdvjru7OxkzZqR69eqh7r9u3TqqVKly/14pw/onFFi0aFGINbbXr1/n5s2brFixgqlTpwJQp04dUqRI8WQfgoiIiIiIRHv790PevK6OIvLE+mT2cYlnZAhcM/ugRIkS3X/tOA6DBg2iVq1aIfrMmTMnwuLw9/dn3bp1xI8fP8LuKSIiIiIiMcOBA7E7mdWaWRepVasWQ4YM4d69ewAcOHCAW7duUaVKFSZNmoSfnx9nz55l6dKloa4tV64cK1as4OjRowBcvnwZgCRJknDjxo37/WrWrMmgQYPuHwcm2FWqVGH8+PEAzJ07lytXrkTKM4qIiIiIiOvs3w958rg6isijZNZFOnXqRIECBShRogSFChWiS5cu+Pr60qhRI3Lnzk2BAgVo06YN5cuXD3VtmjRpGDZsGK+++ipFixbl9ddfB6BevXr8999/9wtADRw4kE2bNlGkSBEKFChwv6pyr169WLFiBQULFmTq1Kl4xoZSZiIiIiIiEkJsn2ZsYnIl21KlSjmB1X0D7d27l/z587soothFn6WIiIiIyAM2b7a/S5aM9u9RsiRs2ADu7hEQk4sYYzY7jlMqrHMamRUREREREYllHAf8/WN2Ivs4SmZFRERERERimRs3Ysf2O4+iZFZERERERCSWOXsWMmZ0dRSRS8msiIiIiIhILHPmDGTI4OooIpeSWRERERERkVjmzBmNzIqIiIiIiEgMo2nG8lTc3d0pVqzY/Z9jx449tO+yZctYs2ZN1AUnIiIiIiKx3vMwMuvh6gBiowQJErBt27Zw9V22bBmJEyemQoUK4b6/r68vHh76oxMRERERkbBpzaxEmGzZsnHx4kUANm3axAsvvMCxY8f4448/6N+/P8WKFWPlypW0a9eOyZMn378uceLEgE16K1euTP369SlQoAB+fn589NFHlC5dmiJFijB06FCXPJeIiIiIiEQ/z8M0Yw3vRQJvb2+KFSsGQPbs2fnvv//C7JctWzbefPNNEidOzIcffgjAyJEjH3rfLVu2sGvXLrJnz86wYcNIliwZGzduxMfHh4oVK1KzZk2yZ88e4c8jIiIiIiIxy40bkCSJq6OIXLE/ma1dGwJGRCNE6tQwb94juzzJNOMnUaZMmfvJ6oIFC9ixY8f9Udxr165x8OBBJbMiIiIiIs85x7E/sV3sT2Yfk3hGFQ8PD/z9/QG4c+dOuPr5+/tz9+7d++cSJUp0/7XjOAwaNIhatWpFUsQiIiIiIhIT3bgByZK5OorIpzWzUSRbtmxs3rwZgClTptxvT5IkCTdu3Aiz34wZM7h3716Y96tVqxZDhgy5f/7AgQPcunUrssIXEREREZFo6OZNCDb+BTwflYxByWyU6dWrF++++y6lSpXC3d39fnu9evX477//7heAeuONN1i+fDlFixZl7dq1IUZjg+vUqRMFChSgRIkSFCpUiC5duuDr6xtVjyMiIiIiItHAN9/ASy/B1atBbUePgqeny0KKMsaJwZOpS5Uq5WzatClE2969e8mfP7+LIopd9FmKiIiIiDwgYBYlJUtGi/do3hyKFYMlS+wKS2Pgp58gfXpo1SryQowqxpjNjuOUCuucRmZFRERERERiqBMn4J13IEsWCNxEZfduKFjQtXFFBSWzIiIiIiIiMZS3NyRMCN9+C337gr8/7N0L+fK5OrLIp2RWREREREQkBvL1BY+A/WnSpoWiRWHjRvDxgQQJXBtbVIiVyWxMXgccXegzFBERERGJ3h6sWly/PgwcCNmyuSykKBXrktn48eNz6dIlJWPPwHEcLl26RPz48V0dioiIiIiIPMSJEyGrFtesCdOmPR/rZQE8XB1ARMucOTOnTp3Cy8vL1aHEaPHjxydz5syuDkNERERERIIZPx4KF7Y/DyaziRPDCy8omX1mxphRQF3gguM4hYK1vwN0BfyA2Y7jfBzQ/gnQMaC9u+M485/mfePEiUP27NmfNXwREREREZFow88P+vSBUaPgo4+CktkHU5+BA+22PM+DyJxm/BdQO3iDMaYa0AAo6jhOQeCngPYCQDOgYMA1g40x7pEYm4iIiIiISIxw9KgdcQUYMQJOnrSvHxyZBciZExIlitLwXCbSRmYdx1lhjMn2QPNbwPeO4/gE9LkQ0N4AmBjQftQYcwgoA6yNrPhERERERESiuy1boEMHGDYMypSBAwdsEgs2qX0wmX2eRHUBqDxAZWPMemPMcmNM6YD2TMDJYP1OBbSJiIiIiIg8t0aPhp9/toksQObMcOqUfX3mzPMzpTgsUZ3MegApgXLAR8A/xhjzJDcwxnQ2xmwyxmxSkScREREREYnNNm4MSmQBEiaE27fh3j0wBtyf48WZUZ3MngKmOtYGwB9IDZwGsgTrlzmgLRTHcYY5jlPKcZxSadKkifSARUREREREXOHOHZu0JkkSst3DA/btg9y5XRNXdBHVyew0oBqAMSYPEBe4CMwAmhlj4hljsgO5gQ1RHJuIiIiIiEi0sXUrlCgRuj1jRli4EAoVCn3ueRJpyawxZgK2gFNeY8wpY0xHYBSQwxizC5gItA0Ypd0N/APsAeYBXR3H8Yus2ERERERERKK7tWuhfPnQ7VmywNy5z89+sg8TmdWMmz/kVKuH9P8G+Cay4hEREREREYlJ1q2Dr74K3e7pCcOHw5AhUR9TdBLV04xFREREREQkHA4fhjx5QrdnyWILP2XPHvUxRSdKZkVERERERKIZxwF//7CrFWfJAgUKPN+VjEHJrIiIiIiIRAOXL8PZs66OIvq4dOnhe8gWKgRvvx218URHSmZFRERERMTlfv8devZ0dRTRx+nTkCNH2OeSJ4cOHaI0nGgp0gpAiYiIiIiIhNfy5XDyJNy4EXpf1efRqVOQM6ero4jeNDIrIiIiIiIudfeunWbcpg1MmeLqaKKHR43MiqVkVkREREREXGrjRihdGlq3hhEjbPGj551GZh9PyayIiIiIiLjU8uVQtardP7VwYZg82dURud7p09p653GUzIqIiIiIiMtcvAj//APVq9vjPn3g22/h3j3XxuVqd+5A4sSujiJ6UzIrIiIiIiIu4esLr74K338ftA1NmjSQJw8cO+bS0Fzq9m2IF8/VUUR/SmZFRERERCTK7NkT9Hr0aKhcGWrXDtknSxY4cSJq44pOdu+G/PnD2XnOHK5M/IsxW/+KzJCiJW3NIyIiIiIiUcLbG4oXh8OH7QjswIGwbFnofp6edpuemObePfDwAGOe7T7btkGx4uHsXKgQ2996mZduJ4RFrcHd/dnePAbRyKyIiIiIiESJ48ftHrIDBsCXX0LLlpAiReh+MXVktmdPmDnz2e+zbRsUKxb2udUnVjN933ScgJLPu+PfoHeTNKSvUNMuNn6OKJkVEREREZEocfQodOxoE75jx+DDD8Pu5+kZM5PZ7dth9epnu4evL1y5AmlShz637+I+3pn7DnMPzaX6mOosObqENtPa8EutXzBffQWbN0Pv3jBvHqxb92yBxACaZiwiIiIiIlHiyBHInRumT4esWcHtIUNrWbLEzGnGJ0+Cn1/Itt27YdYs+OAD+OILaNHCbj/0MNu3Q+48odv9HX/aT2/P6IajKZyuMBtOb+CLpV/wR50/KJGhhO00ZYodnZ07F7ZuhRUrIu7hoiGNzIqIiIiIyBM7eBA6d4aA2a7hcvSo3Ts1b16IH//h/dKkAS+vZ48xKl2/DunSwdWrIRPa/v3tPrq5c8OtW3Zkev36h88IHjsWKlUM3T5j/wxKZihJ4XQ2Ey6TqQzzW82ndKbSQZ3c3W3GPGCAXbh7/nzEPWA0pGRWRERERESe2NSpMH++HQwMryNHbDL7OMbYJPlJEmVX27cP8uWDAgWCKjZfvw5btsDs2fZn4EBo185Orx4zBu7eDXmP3btt/xdfDNnuOA4/rvmRjyt+HP6A6ta1bxrcjRtP/FzRmZJZERERERF5YnPn2mS2T5/wJ50nT9opxOGRMqVdOxpTBCazZcrAhg22bdw4O63YGJvkArz9NqxcCeXK2eQV7IhtxYp2z91ffgk9/XrTmU1kTZYVz2Se4Q+oQQM7nzvQ7t2QIwe8/nqsGbFVMisiIiIiIk/kyhU7qpgvH2TODGfPhjw/Zgy0bw9Llwa1OY4tbhQnTvjeI0sWOHTIriGNTu7dg2vXQrfv3Wv3hq1SxY5We3vD0KHQoUPY9ylVCjZtsq+XLYMKFWD/ftv+oCl7p9C0YNMnCzRPHvD3h+++s0H36GG/gejWzZaUjgWUzIqIiIiISLg5DowfD7Vq2eN8+eyoZCBfX/jpJ+jSxeZPvr62/coVO9oaXp6e0KwZNGwIPj725+bNCHuMJ+Y4dilqq9bwxhtBg5sLF0LTprZ4cL58dh9dT0946SVo0+bhz1yqFGzcaF/Pnx/0eYZ+X4f5h+dTK+dDOjzK1Kl2anGFClCkiH3TypUhYcInv1c0pGRWRERERCQG69fP/jzO2bPw22/P/n716tkkrFMne5w3rx1RDDR3LtSoYafR1q4N//xj28O7XjZQtWrw2Wd2mu7UqXYKboUKdt2pK/zvf3Yt7N9/Q4/3baI9bJhtr1sXTp2yFZoBfv7ZTivu2vXh9yta1O4nC3bacaVKYffbeWEnuVPmJkGcBE8edJw4ttLUxo32G4ZYRlvziIiIiIjEYCtX2lHPbNnsCGFY9u2zydetW9C6NSRL9nTv5eNjRyRnzQpqy5sXpk0LOh4xIqhS73vv2UTvtddsQvqwhC24LWe3cOLaCepWrUu1ah4cP27XoTZqZN+nXDno3v3p4n9a9+7BggV2txuzBcqXg5657DLUyZPtUtQ2bYL6J0pkE91HSZDAjvauWAEZMz68uvOUPVNonL9xxD1MLKJkVkREREQkBjt1ChYtsvV+HpbMjhgBffvaqbDLltm+T2P3bihUKGRb8GnGZ87YxLpgQXucPj00b26n5e7da2N4GD9/P96f/z6HrxwmcdzE7PXayyeVPyFrVjtC27atHWhMnNi+R4oUT/cMT2PdOptEGxPUVqvWw6cGh9d778Gvv9qiUA8z59AcPqzw4bO9USylacYiIiIiIjHUrVt2+WOqVLYC7qVLofs4jl3XWbOmnf67aNHTv9/WrXZNaHDp0gWtH/3rL7v1THA9eti1rt98Y7dBDYvjOLw1+y2SxEvCzOYzGdtoLDMOzGDXhV2AHYkNHE0OXi04qixaZNfARrSWLe2IdZ06YZ/ff3E/GZNkJEm82FGwKaIpmRURERERiaECK+iCTbYWLgzdZ/16KFYM4sWza07XrAn7XufP2xpB8+fD5s1w+XLoPlu2QIkSIduMsfe+fduuj31wdNjNzVb3fVgy6DgO3636Dsdx6FutL8YY4rjHYWDtgXyy+JNQ/cuWtc/0oDNnYOzYyEl0lyyxa3ij2pS9mmL8KEpmRURERERiqN27g6b01q4N8+aF7jNxYlCCGS8epElj93t90PTp9h5jx9qqvXXqhK4evG2bLVz0oDx57NTlmjXtNODw8vX35e3Zb3Pw8kEG1xmMCTaPt3Sm0oDdYzW4smXttN/g/PygcWM4fdpO2Q3vvrfhce2arcj8JJWYI4LjOPy37z/q5akXtW8cgyiZFRERERGJoYInsyVL2mnAYJOvCxfsaOnSpSHXdtavH7JgU6CpU20i+Pffdp/Yrl3tLi6dO9vk18/P7p0a1hal7drBu+/CDz+EP/a7fndpNrkZmZNmZlT9UcRxD70Bba+qvfhq+Vch2jJntuuEgyesQ4fakdOePW1BqogcnZ02zVZwjmrbzm8nf+r8pEgQhYuDYxglsyIiIiIiMVTwZNbNzRZFunLFjtCWKQODBtlRWY9gZV8bNbKJa+D1vXrZ/lev2orIgVq1slOOGzWyyVzVqnZ7nLBUr26rFgcvkPQo/o4/7aa1o5JnJT6r8lmIEdngSmUshcGEGJ01xsZ54oQ9dhwYMsQWiQJo3x7+/DN8cYTHxInw+usRd7/wmrxnMm+Veivq3zgGUTVjEREREZEY6OpVO602Y8agtjx54OBBu5a2UiXo3RuOHQt5XYYMNgH87TcYP96Oxg4aFHbCljYtvPyyLfrk62tHRSNC72W9yZw0M++Ve++xfXtV7UXv5b2Z2Xzm/bZixeyU56xZ4dAhyJXLbocDNrHu0cM+Y3iT64e5eNFOM86ZM/zXrDy+kjkH55AnVR4a5GtAygQpueJ9hSVHl7DoyCJOXj+Jv+NPrpS56FOtD8njJw91j5PXTnL6+inKZS73bA8QyymZFRERERGJQX79Fa5ft3ufdusWMmHLmxf277fJ7Pvvw08/2WrDD2rcGEaOhOXLIWlSOwr7KOnTh93uOA7jd47HM5knFT0r4mYeP/Fz9oHZbDqziVktZj22L0DJjCVJGi8po7eNpm2xtoBNrrdts+t0ly+3o8aB3NwgSxY4ezZkov80xo2DJk3CPnftzjXcjBuJ4ybGGMOtu7foPrc7Xre9eKPEG+y/tJ+64+tyx/cOieImonq26rQs0pKcKWxmvPTYUqqPrs4/Tf4hV8pc9+/r4+vDl0u/5H+Vej50xFosJbMiIiIiItHclSt225sePWDCBDvNdscO+xNcnjx2vei+fTaxDRytfNBbb0HHjnZbn2cxYP0AVp9cTRy3OIzZPoZh9YaFSMDO3jjL/MPzKZWxFAXTFGT96fV8vvRzFrZeGK7EN9DwesOpObYm132u07FER4oVS8jo0fbcihV2v9bgChWCXbueLZm9cQNGjYLVq0O2e/veYeC6Afyz2e6He/PuTRzH4da9W/Ss2JP2xdsDUI96j9wftkXhFhRIU4Am/zZh2uvTyJo8KxduXaDttLZ0yF2H/KnzPX3wzwklsyIiIiIi0dzy5fDxx1CqFKRObUcMvbwgzgM1k/LksdWIb99+eCILdg2txzNmAmtOrmH6/unMbzWfOG5xeGfuO3y88GO+r/E9Dg5fLfuKhUcW0jBfQ/os78O+i/uI5xGP6c2mkzph6id6r4RxEjK7xWyGbBpChZEV+Omlnzl69EUAtm8PXWG5YEGbzNas+fTP99NPNul/sDpzv1U/kDNlTja1m/TMI6fF0hdj8CuDaTalGQaDj58PX1f7mpevp32m+z4vlMyKiIiIiERzq1dDy5bQrBl89ZVNRDNkCN0vRw67B2vg3rOR5a7fXd6d9y4TG08krntcAAbUHkCf5X0oN7IcPr4+vFbgNVZ3WI27mztgt+Hxd/zv939SyeIno2elnrQp2oZXJ72KR5aUzJlTnCxZwN09ZN9ChWDw4Mff88oVu59uWGtiZ84MvQXQ+J3j8XP8aFm4ZYRNAS6fpTxrOqzhyp0rpEwQsP/P5s0Rcu/YTsmsiIiIiEg0t3at3Qe2cuVHbxMTJ47dSzayk9mvV3zNq/leJWfKoCzQ3c2dr6p9ReeSnUmbKG2orXY83CIm9ciYJCMj6o+g9rGufPy/pcyYHnq6cv78sGeP3Uro0qWHF67q3Rtmz7bFr6pUsSO5xtiiTwkTQtxgebf3PW9+WP0DqyoMiPC1rMaYoERWwk1b84iIiIhEgp077chQ8L0wRZ6GtzfcvQupUtmps2EVdAp08tpJ8uR5eDJ7xfsKgzcOZv/F/U8dz7R909h0ZhMfV/w4zPOZkmYKc8/YiFQobSHqlirOeyPHkyNH6PMJE9rP7YMPgqo0v/uuLY4V6NIlWLnSfqaFCkH//jBjhj23ebPdtze4gesH0rZoW5LEC2OjXXEJjcyKiIiIRLDVq21BmpQp7fTFWrVcHZHEZJs22bWyYCv1huXqnat0mN6B7ee3U/aFTyhXrlOoPjvP76T5lOa0KdqGVv+14p0y79CmaJsw77fHaw9jt49l54WdxHGPQ84UOSmctjAnr59k3qF5zGw+8/70YVf5puYX1BhbgzYlm4aYurzt3Dam7p1Khhw9OHQoBRkzwogRdi/akiVtYSywXzZ16QLx40Pz5lC2LHToYCskb9wIpUsHvdel25eYsGsC6zqtg+27o/hJ5WEibWTWGDPKGHPBGLMrjHMfGGMcY0zqgGNjjBlojDlkjNlhjCkRWXGJiIiIRLatW6FzZxg6FHr1An9/V0ckMdmKFXZ68cM4jsObs96kYb6G7H57N+fTTuBQnKkh+ly8fZG209oyuelkPq74MSvarWD8zvEM2zwsRD8fXx96Le1FpxmdKJ+lPH/U/YP+tfpTO1dtLntfJnHcxCxtu5QUCVJExqM+kVQJU9E4f2MGrR8E2M/hy6Vf8tHCj0iVIBVHKr5E3wGn6NHDJq2ffgq7A/LQw4fttO22bYPulyOH3Vd3zRr7BULwZPa7Vd/xQfkPiO8RPwqfUB4nMkdm/wJ+A8YEbzTGZAFqAieCNb8M5A74KQsMCfgtIiIiEuPs3w9Nm9rtU/Lls6M8ZfU3G3lK8+fD1KkPPz9u5zjie8S/P8o6telUao+rTVz3uNTNU5dLty9Rb0I9vq/xPfkCtntJECcB/73+H11mdWHB4QW8WepNzt88T/91/WlWqBkr2q8IscY1W/Js1MhRI1Kf82n0KNeDxv805syNM+y5uIdcKXIxv9V83IwbJTOW5P1Fr7Ow1SKmT09A0aK2OrHjwJtvwqBBdlQ2uD59bJEtb2/Indu27b+4n1UnVvFDjR+i/gHlkSItmXUcZ4UxJlsYp/oDHwPTg7U1AMY4juMA64wxyY0xGRzHORtZ8YmIiIhElv37g6Yy5ssHx48rmZWnc/myHdlP/ZCdbI5dPcbPa39mebvl99uSxU/G9GbT6T63O18u/RI/x4/vX/yemjlD7lOTIE4CxjQaw9KjS5m+fzpJ4iZherPpZEqaKTIfKUIlipuIWS1mMXrbaNoXb0+htIXun6vkWYl2RdvRedYbjG00FjCcOgUHDthti8qXD3mva3eukS1XPP78Mz4TJtgp3Xf97tJ+ensG1xns8mnVElqUrpk1xjQATjuOs/2BCmCZgJPBjk8FtCmZFRERkRjnwgVIk8a+9vSEEyce3V/kYRYufPheqUevHKXF1Bb89vJvJI2XNMS5tInSMvG1iVz3uR7q3IOqZa9GtezVIirkKOfh5kHHEh3DPPdGyTfYfn47P6z+gf9V/B+JEhkmTQpZEdrH14c+y/sw59Ac4rnHI3XC1AzoOYAr3inpOKMjTQo0oUQGrYKMjqIsmTXGJAQ+xU4xfpb7dAY6A3h6ekZAZCIiIiIR59YtW0k18Ht7T8/Qe1WKhNfcudC1a+j2MdvHMGD9APrX6k9Fz4oPvf5xiezzoH+t/rw9+21eHPMi6Qv/xu+/F2D7dnvu4u2LNP23KXXz1GXjGxvxcPNg+bHldJ3TlUvel/hfxf/xWoHXXPsA8lBROTKbE8gOBI7KZga2GGPKAKeBLMH6Zg5oC8VxnGHAMIBSpUqp2L2IiIhEKwcPQp48QccamZVnsW1b6C1i+q3ux6Yzm1jRbgWJ4iZySVwxSRz3OAyvP5xt57ZR/0Rb4lZrQrxkb7Dx9CG6zOrCty9+S+1cte/3r5qtKlWzVXVhxBJeUZbMOo6zE0gbeGyMOQaUchznojFmBtDNGDMRW/jpmtbLioiISEy0b1/QelmAjBnhdJhf0Ys82rlztrpu8O14VhxfwbxD81jQekGIAk3yeMXSF2Ny3eUMSjmMOuPrkDlpZsY0GhNina3ELJH2b4AxZgLwApDaGHMK6OU4zsiHdJ8DvAIcAm4D7SMrLhEREZHItH8/FCkSdOzhAX5+rotHYq5166BcuaDjO753eHfeu8xsPlOJ7FMqUzwhY4u/B7zn4kgkIkRmNePmjzmfLdhrBwhjNYCIiIhIzLJ2LbQP9rV8j3k9OFbhEEsOfkr13OUffqHIA9atgypVgo4HrBtAy8ItyZw0s+uCEolG3B7fRURERETC484dOH/erpMFOHX9FOtPr6fMrT58tuhz1wYnMc66dUFbOl32vsyEXRPoVqaba4MSiUaUzIqIiIhEkDVroGKwwrID1w/k3bLvUixdcW55+3Lu5jnXBScxyuXLcP06pEplj4dvHk6Xkl2I7xHftYGJRCNKZkVEREQiyMKF8NJL9rWvvy9zD82lcYHGeHpCQbfXmLxncqhrhg0L2rrH3z8Kg5Vo659/oHp1+PJLe+zr78v4XeNpU7SNawMTiWaUzIqIiMhzydc34u+5fDm88IJ9venMJspkLIOHmweenpD+ctjJ7NCh8PHHUKwYFC1qR+Pk+TV7Nvz2G6xaBQ0b2rYpe6ZQM0dNbcMj8gAlsyIiIvLc8faGQoUidiTUcex9kyWzx4uPLKZGjhqAXUN75UQG3N3cOXX91P1r7t4FY2DZMti4ET76CP73v4iLSWIWf3/49FOYNg0SJ7Zt9/zu8cPqH3i//PsujU0kOlIyKyIiIs+dEyfsFjobNkTcPb28IE2aoOPFRxdTPXt1wCazJ05AkwJN+Hf3v/f7HDxo96R1c4M4caB1a1tAavToiItLYo6VK6F0aUiZMqht6OahNMzXkAxJMrguMJFoSsmsiIiIPHeOHbMjs1OmRNw9jx+HrFnt69v3bnPj7g3SJU4H2NHaq1ehcf7GTNkb9Ka7dtk4At26d5Mf/zjLmDHw1Vd2qunnn9sRXIn9xo6FNsGWxW4/t50/t/3JB+U/cF1QItGYklkRERF57hw7Bp062YJNjhNx98yWzb5ee3ItFbMElTU2xv6kSpCGxHETs+HIPk6fDkpm/R1/+i7vS8VRFek0twVx29UhbtqjDB9upx9H5AhydLVsWdhJu+PYLwJiO29v+2ddqZI9PnvjLO2mt2Ni44laKyvyEEpmRURE5Llz9Cjky2cLLi1bFjH3DD4yu+bkmhDJLEC6dHDhAnxZpRd1f3ufZs0ddu6EAgX96TC9A9d9rrO582aWtl3KZ1U/YZJpRJtei+nUCRYvjpgYowPHsUWOALZsge+/h0mToG5dmDs3ZN8LF6BePahQAT74IHKKdkUX06dD/fp2yvnte7dp8m8Tfq31K7lT5XZ1aCLRlpJZERERee4EjqJ++qmdzhsRo7MhktlTayifpXyI84HrZvcsKE+qeOlwKz2U5Wtu0XdHRzImyciPNX/Ew80DgEqelZjXah4/r/2Zaf4dWbgi9pQ4PnsWXnsNfHxsErtnD/z5p03mJk0K2ffXX6FRIzuCHS8efP21S0KOcOPG2bXSf/0F9+7ZtrFj7Zppf8efttPa0rF4R6pmq+rSOEWiOyWzIiIiEahmzYibtiqR5/hxm1zmzQvZs8P8+RFzz2zZbDJy5sYZMifNHOJ8YDI7YgTM79GfrOW24vdmASpmqcA31b8Jdb/0idMzu8VsXs5fja1FqrPr9JFnDzIa2L7dJrIbN8Lq1TBwIMybZ/dV3bsXTp8OGolesQIaN7ajlX372gJJH3wQtC9vTDVuHIwZYwuAlSkD/fvbLZly5fbn44UfkyN5DtoXb+/qMEWiPSWzIiIiEcTb267BPHTI1ZHI49y5AwkS2Ne9e8MXXzz7FNbTpyFjRth/cT/5UucLdd7TEzZvhvjxwTNtcsY0Gcr1Psd5o+QbGGPCvKcxhlZFWtHQYwhNJrbgju+dZwvShY4ft6OQ27fbqcPz5tk1ssmTg+M4TN07BY963Snw3oe0672Uixdt/+TJ7fXu7nbLmho14J13XPggz+jKFbh8GcqWhW++gSVLwOv6TV7svICGExviZtz4rsZ3rg5TJEZQMisiIhJBTgVsH7p+vWvjkEfz9g5KZAEO+C4k7is9eX/Qkme6r7+/TbjWnFxD+czlQ5339LSjcS+++OT3blmtNJkutabnop7PFKMrvfEGTJ4M27ZB9+4weDCUKweXbl/i1X9eZf7h+fRt8RojP3uJxC/+TvnvO5Cv8l6OXz3O0E1DeWnsS1QdX4I/bzbFP+c8Tpyw2xh5e7v6yZ7MtGl26jQEFHma34AlmWpwPe08epTrQb+X+uFm9Fd0kfDQvykiIiIR5ORJKFlSyWx0F7zq8Lgd4/hm5Te892olRh37jK1ntz7VPa9eDRpBXH1ydajiT2CT2TNn7FT0J1W5MtxY8jbbz29nx/kdTxWjK/n62rWx//xjp9a+8AKkSgUZSm2gxtgatC/WnmH1hlE7XxVeK1aLWa3/5dCcuuzP/Clvz3mbW/du8VeDv9jceTNfVPmCu0WG0HnSZzRs5Md//7n66R7PcYIqNf/zDzRpAnu89lB7XG3eLfsu6zqt45dav1AtezXXBioSwyiZFRERiSAnTtgRl82bXR2JhCXwz+XAAZvMXvG+wo9rfmROyzk0KVqX7Nv/4o0ZnfG+F3Ko759/7H6vj3LsmC3+5DgOm89upniG4qH6ZMoEadJAqVJPHnuSJBA3juHLsj/z/vz3cWLYwuydO+2a2FOnIG5cO4Jd9f1h/Of9HlObTqV+3voh+ufMaej24qvMbfsfs1vM5v3y75MpaSaMMRROV5gpTf5j1Qp3thdowL6j0b84VmBxp0uX7Bcf7imP02JKCyY0nkD17NVdHZ5IjKVkVkREJIKcPAkFCth1fj4+ro5Ggrt50xbaWbECfvwRWraE/uv6061MNxLGSQhAcc+81EzXjk8Xf3r/ulu34L33YObMR9//8GHImROOXj1K1mRZ71clDi5OHNi3zyZyT6NaNbiypwT5U+dn+JbhT3cTF1m9GipWtFvPFC4M3678lmupF7Ki4xKyp8ge5jWDBkGKFGHfL09uN2q496FzpcZMuNYtEiOPGGPH2pHpAQOgRsPzvPrPqwyvN5wCaQq4OjSRGE3JrIiISAQ5cQKyZLF/Wd+1y9XRSHD79tmRwWbNoHRpSJ/9EjMPzKRt0bb3+xQpAvmuv83WU/uYtH4ZYBOqdu1ga7DZx97e4OcX8v6HDkGuXLDk6JJHjrSlTPn0z/Dii7bA2A8v/cCwzcM4dDnmVBpbtQoqVYJu3aBq22WsPrmaCY0nEN8j/lPfc9o0+Lxue67fvsOM/TMiLtgI4Di2OjHYwmC+vrbQ2NcT5zElQS1+euknSmcq7dIYRWIDJbMiIiIR5ORJuy4yXTo7nVCijz174OWXYfx4u6/sz2t/5t2y7xLHPc79PkWKwM6dhlRrh/DR/J74O/5MnQpffmkLDQXO7O3ZE/74I+T9w5vMPouKFe167BuXEzKg9gA+WPBBpLxPZNi7F/LnhyTJfBm4938MenlQmKPXTypVKki78Xe+XPolt+/dBuya3IjYaulZzJ8P5cvbLz7+/BPqN7vEJP/XKdJ2FIvaz9HaWJEIomRWREQkgly4YNdEJk0K1665OhoJLjCZeuEF8HH3Yt6hebQq0ipEnyJFYM0aWDkzG0mvV2DcjvH4+tqtdDJldth39AZg90B9cNrxoUOQNfs9dl7YSaG0hSLlGTw84OOP7X6rnKyIu5OARUcWRcp7RaQTJyBzZrtX7Ohto6merTo5UuSIkHsbA3F909C+WAd+XP0jFy/afWkHDoyQ2z+1zZvtNk3VqsHStdeY5FaPZoVeZ9tn/5AxSUbXBicSiyiZFRERiQCBo3bGQLJkQVMMJXrYs8euZ/Z3/Ok0sxO9X+gdamQwfXqblLZuDcm3f8aPq37BL98/fL3ia7aULk7DKS9R8veK3HzhTQ7EH8sJr8v3r71yBVZ7zaJWzlqRuq1K06Z2j9IPPoByN37g08Wf4uv/jBvkRrLA9bI+vj4M2jCI/1X6X4TeP2NGqJ/xLRYcWUCLXrPp08dO7XWlbdvgt9+gS7fb+DdpxEcVP+DV/K+6NiiRWEjJrIiISAQIvjVL0qRKZqObwPXMfZf3pWCagqGq5wZq1MjugXrrYir6FVqIj+cc0iZKS/9Ca2l+ax2v+86haZ62eBY+RdVR1Vl7ci3e3nb0duTWkXQs3jFSn8PNLWiq9KXDWamZsyYjt4yM1Pd8VoHrZUduHclrBV4jefzkEXr/bNng9Ik4TGowkzVu/ehzvgSHa5Sg8YTmnLt5LkLfK7wOHYLsOX2Z4taUNkVb07hAY5fEIRLbKZkVERGJACdP2mQJNM04ujhyxP6+c8duBzPr4AzWnV5H32p9H3rNH3/YLXbixoUzh1PxRpq/6FyyM1UrJGDCBBjyazLerl+e7175hNIHZ9Jjfg8GLhtHokKLue5znfxp8kfJs+XNa4ta9azUk8GbBuN1yytK3vdpbNwIpUo5jNgygnfKvBPh98+e3W6NtHpRSt5LvozNnTfT2nsTFRO2p/bftTl29ViEv+ejXL8OiRJBj/nvUjFLRdoXbx+l7y/yPFEyKyIiEgGOHIEcAcsAr3js4cyNM64N6Dm3aJGdVnzrlt1XNmXhDXy1/CvGvToOd7fH742TLZtdG5szpz3OmBF27IApU+y5smVh34YszG2+iDkH5+CV+U9G1B8Rqc8UnKenHW1OHDcx31b/ls6zOkfLvWevX7dbEm32WkXR9EVJFj9ZhL9HtmywezcMGwatWxmMMRQp7EbCszX5pdYvfLzw4ye+55kbZxizfQwrj6/E3/F/omu3b3fwqdAbb19velbq+cTvLSLhp2RWREQkAgRWswUYeOQtpsavy8RdE10b1HNowwYYMQI+/NCuL52x4BpfzxvKrmxdmNp0KikThG9vnBw57DY4gcksQLx4UKKEfe3mZrf6Wb8yMXV9xvFxrr/JkypPJDxR2Nzc7H619+5BnTx1SJ0gNVP2Trl/ftKkoJFpV1qxwq6XHbF1BJ2Kd4qU98ifH/79F+rVsyPWYLfH2rkTqmevjo+fD6tOrAJg+3b7BUdwjhO01dK2c9to818bGv/TmLM3zjJq2yhqjq3J8avHHxnDPb97zD4wm/8t/B+dVr5EgjRnGV5vOMaYiH5cEQnm2Wuii4iICIcOQeXKcOLaCeLHiUPFQ0sYsP5lmhVq5urQnit//GG3RhowAC7dPUOX5XVJcKg5i35aQNbkacJ9n5w5wcsraLQ9LE2a2MrC587B3LkREPwTyp4djh6FPHmgT7U+1J9Yn1fzv4qbcWPGDLs91NtvR31cwU2cCK3fvMDne/dQIUuFSHmP/Pntv3/BFSoUtNfzTy/9RIupLVjVfhXvvBOPmjUd6nTcxpqTa8iXOh9T515l57ldxMm9Aq/TiXg52Qd8XqMKWbIYEiSA1SdW02BiAwbXGRzmM+w4v4OmY7qQwb8sH71ak7UDuzL8pyy4uymRFYlsGpkVERGJAIEjs5N2TeK1/M3wvpKcZPGSPXZERyLW2bPw7rtQsbIv3x9rhNv8AZT1+4i8mcOfyIJNYtOnt2sfH6Z8eZswjhgBGTI8Y+BPIW9e2L/fvs6QJAMVs1Rk8p7JgN0Xd+3aqI8puNu37fTf5T4DeKfMO1E6SpksGfj4wPHjkDtVbpoVbMZ7cz/gjMcq+p2uw1dLv8XNuDHrwCzWHNzD4bVFGFzzT8zEGaS4XpUvvjBUq2ZHbSt6VmR6s+l8tfwrXp/8Onu99gLgdcuLL5Z8QZ0hb5Ft53B8pv/K5fWvkDqOJ3nzKpEViQoamRUREYkAly5BypQwZe8UpjWZw6Tr0D5fI/7b9x/vlXvP1eE9N7y87F6/k3b/Q7VsL3CuQGVatHjy++TKBblzP7qPm5stbuQqgclsvXr2+H8V/0f9ifV5rcBrXL7sxqVLcMf3DlfvXCV94vRRHt+MGfBSvWvMOTibr17oHeXv/8MP0K2bjeO9cu/x1rjviVN6DB0z9CTdiSq8FfDPRfFPoJQnjBsMDRpAz4Blrs2bw5YtULIkZE2elfmt5rPi+Aq6z+vOZe/LxPeIT9l4bcm3djlz5nqwYYOdUr1uXZQ/qshzSyOzIiIiT2HLFujSxb728bHVbw9c2k+aRGlInywl9+5Bg3wNmL5/umsDfc74+4Obm8OA9QN4r9x7/Pkn1Kr15Pfx9IRp0yI8vAhVuDD8/TeMGmXXfGZIkoFKWSoxec9kHAduFOlHyT/KUn10dVafWP1E9551YBb/7f2PW3dvPb5zGL77Dn78EW4V60fX0l2J4x7nqe7zLKpWhcSJYf16cHdzJ/upz/i8yDC+fqMKEybYz+ziRbulVpMmNubgX3y0awd//hnynlWyVmFh64VMqr6Ziz+sZvXAzvw1ygM3NyhXDtasgdKlo/IpRZ5vSmZFRESewLx5NmEaPdpWtj1/3m4Lkj07TNw1kWYFg9bIpk+cnus+17nnd891AT9HfH1tUaR5h+ZRNF1RMiTJgNsz/E0nZfhqRblMsWIwdqydytukCXh7w8cVP+aLJV9wtHw94mXdyjeem5nfaj5vz3k7XHuuXr8OLT5ZSb/V/Vh9cjVtp7V94irJt2/D5MkwZeEpNlxa4NKtaWrUgE2b7OuVK+269kSJbPGuWbPsVOwKFaBOHXjtNciXL+S1K1bYPaQD+QcUNp4/H3r0sIlypkxB58uWjfRHEpFglMyKiIiE09mzdhrin3/C0qXQuzeMGWPXy+bM5TDjwAwa5GsQ4pp8qfOx/9J+1wT8nLlwAdKmhZ/W/sSHFT50dThRonBh+Plnuzfu3Ll2dPbfV1ZQ5NxPfFv6bzau9yBLsix89+J3dJvT7bH3GzPxJlNudafKxb/5qeZPJI6bmH92//NEMW3bZkcne6/4nN5Ve+Ph5rpVbcWKwdat9ouO06ftiDvAW2/BV1/ByJF27XOKFDBhQshr3d1tga8mTezsizNn7JdWx4/DsmXwwgtR/DAiEoqSWRERkXD66y/45hv7l+BKlaBNGztCO3kyXM84jdwpc5M4bmLArqf084Ni6Yqx7dw2l8b9vDh7FtyzriNlgpRRuk1OdFCqFBw+bF/730hHzmR5KVPKnc2bbdsruV8hQZwE/Lf3v0fep9/ab/iyThdmj/fkyhX4tfav/Lz2Z+YcnBPuWDZtgrRFtnH6xmleyf3K0z5ShChY0FY13rTJfkaB8uSBwYNtW9WqD7++QQObzFapYkdua9WyX2bt3x+0DZCIuI4KQImIiISDv7/du3PVKrsVSI4ckDQptP9hGn+vXkpcs505rwTt85k0Kdy4AcXSF2PB4QW0KtLKZbGfP2+3q4kt9u61hZfatAnZfuy0N1vTfsDMyr+7JjAXypnTTqMF++edPr2tsHz2rK3Iawz8+NKPNJjYgIb5GoZZWXjhlgNcT7WMni+t4sRUOHAAypZNzrxW8+gwvQOfLv6U3Kly07F4R2rnqv3QWDZucjhY7iOG1Ojn8n1W48e3XyrNnQsvvRTyXLly9udxOneGmjXtvrUvvmiT2IoV7WcqIq6lZFZERCQc9u+3ozmJE9v1dQDfrvyWrbe38m37DlTL/gPxPeLf7580KVy7BkXTF6Xfmn4uitomMqVL26mRseEv38eOwWttL3At2xg2pD7G8WvHueN7h5QJUrL9oBdVk3SgWPpirg4zyuXMCUeO2NfnzgV9eZEpk01oM2a0a7gLpinIkqNLeDHHiyGuv3X3Fp1mt+adnL/j7uZOrlx2+nzZspAyQUqmNZuG4zjsvLCTn9b8xOCNg/n2xW8plLZQqFiW3xpMg6wFKJ6heGQ/drjkzw/Dh9vpz08rWzb7A3a0tmjRCAhMRJ6ZklkREZFwOHMmaL0dwOIji1l7ai3/vf5fmGsCkyWzxXSyZk2L1y0vHMdxySjVzZtw8mRQQhOTOY5D6+8mc6fp1yTY2I262ZqTJ21WkiZIwCXvi/y05xKv5Kvg6jBdInVquy0R2JHZLFns6+LFbeXtwD/798u/z/vz36d69ur3/3n08fWh9X+tyXj2TZo2tHNxc+WyI5GB3n4bPvjAUCRnEcY0GsOak2v4YMEH3PC5wQvZXqB1kdZkSpqJv7dM5ornWH6stSyKnvzxihWzU43Tpo2Y+/Xvb9fTiojrac2siIhIOJw9a6dtBvp57c98/+L3Dy1uEzgyC5ApaSZO3zgdBVGGFpjg7Njhkrd/Jjdu2D0/W7aESdOuU3N0HfbdW8i6txbTKOsbcKIiX32QmZ/6piJv6rzEOVchxJ/R88QY8PCAe/dCTisvXtwWQApUKG0h8qfOz49rfgTg3M1zvDzuZWrmrInPuvbkz2/7BY7Mgh3dnzULOnSwhZQAKmSpwPxW85nfaj7F0xfn86WfU3d8XeasO0KHeHNCzFJwterVbewRJU4cnqlKtohEHI3MioiIhMPZs0FbcOy+sBuAgmkLPrR/4MgsQKkMpdhwegOZk2aO7DBDuXjRxrJzJ9R++DLHaOm116BxY2jU9Da1/q5Dnsvv8kWJ10iTyG6nMmOG3Zbm3DlYssT+GaVP7+qoXcfT047CB09mS5SAceNC9vup5k80/qcxC48s5MKtC/xc82fKpqnB2AQ2IQa7JjywoNSJEzYpzp/frhtv2TLoXkniJaFJwSY0KdiE48ehYUOYsCLSH/WJFC9uf0Qk9om075WMMaOMMReMMbuCtf1ojNlnjNlhjPnPGJM82LlPjDGHjDH7jTFPsb25iIhI5Ak+Mjts8zC6lXn0NifBR2YrelZkzck1kRxh2Ly87BYiO3bApduX6DanG4UGF2LSrkkuiSe8HMdutdO5M6y6M4Qer9Qn+ZnXaBVQR6tCBRg2DNq3t9Vl33/frol8npPZnDltAhpYAArsVjKHD9vPM1Ac9zjMaD6DsY3GsqD5MjZOqsHWrSETvkSJ7L61YL8IKVTIfrGwZMnD3/+77+xPkiQR/2wiImGJzEkSfwEPfge8ECjkOE4R4ADwCYAxpgDQDCgYcM1gY4xWI4iISLQRmMw6jsOy48uokaPGI/sHH5ktm6ks606ti4IoQ7t40W4jtG8f9Jjfg6LpirK83XLG7hj72G1aXOnCBTu6eOvuLcbsGMNHVbuyYAGkTGnPp00Lr7wCrVrZ9aCTJtkCPfGjz+zWKBeYzF6+bPdNBTv9uHBhm+ifP29HsgOlT5ye3ZtT8PXX8OmnULJkyPslSWL/Gd61y94jcP1tIMexx4Hb/6xfb6v9iohElUhLZh3HWQFcfqBtgeM4AastWAcEzrdqAEx0HMfHcZyjwCGgTGTFJiIi8qQCk9lt57ZRME1B4rrHfWT/pEmDktlk8ZPh4+fDHd87URBpSF5eNtm7mXwd529cpF2RTqRKmIqR9UfSZ0UffHx9oiSOczfPUWd8HUoMLUHNsTWZuGsiTvDhwgfs2RNQhXbLcNoWbUvCOAlD9Zkxw35pAHa7lKVLIyv6mCFHDujTx/4Ovqazfn2YPh1694YhQ2zb8OG2MvTMmTBypE2Cg+/DCkHJceDIrIcHpElj/13w8bH37dcP3ngDjh610/DjxImqpxURcW0BqA7A3IDXmYCTwc6dCmgTERGJFq5ftwnqtH3TaJiv4WP7J0sG8+bBwIH2uGSGkmw5u+XRF0WCixdtpds7ZftyctSPVKxoOHIE0iVOR7OCzRiwfkCkx3DkyhFq/12bD8p/wJYuWxhWbxgrj6+k7oS63Lx7M8xr9u6FfPkcxu4YS4fiEVi9JxarWhUWLoR//w3ZXru2bVuwwK5/BRg7Fj7/HJYts+tcd++2o6/BBVY0PnDAbksFUKWKvU+zZlCrFkycaEdsv/xSo7IiEvVckswaYz4DfIFxj+sbxrWdjTGbjDGbvAJLNIqIiEQBY2De4XnUzvX4Skrly0O7dnZdJ0DFLBVZdWJV5AYYhosXwSQ5R+ac19mzrCBDhti1j44D75V7jwm7JnD+5vlIe/8Lty7Q5J8m1PMfRbVs1QHIljwbv9f5nVdyvULf5X3DvG7vXvDLtIaCaQqSPH7ySIsvNokbFwqGUZMsWTI7atqzp91iCmyl6PPng6ZmB07fDq51a/j1V/Dzs/cGqFzZbtNTpw50C1g23rkz/P23klkRiXpRnswaY9oBdYGWTtD8otNAlmDdMge0heI4zjDHcUo5jlMqTZo0kRqriIgIwO3bkDAheN3yIoFHApLGS/rYa5Int8lAvHg2cayZsyZzDs6J/GAf4OUFq65NpHmh5oBdF1msGKxdC/E84vFFlS/oubhnpLz3DZ8bNJrUiBd8f2DYVyUYPz7k+TdLvcnqk6vZ67U31LV798LKW8N5o8QbkRLb82bSJOjY0Samd+/a6cC//QaffPLwa7JksbMLevcOaqtUya6R7dQpqK1MGbvmtlChSAtfRCRMUZrMGmNqAx8D9R3HuR3s1AygmTEmnjEmO5Ab2BCVsYmIiDxM4JYvS48tpXr26k90beDa2XSJ7V4pkTkKGpaLF2HeyUm8XvD1+20tWnA/sWyUrxH3/O4xZOOQCH3fdl2uUX5QA15J3Y1Fw2qwaZNdX3npUlAfdzd3fq39K93ndQ+1fvbczbMcvbGPSp6VIjSu51WKFHYdbeLEthhYlix2nXGZx1QoSZvWro0N5O4O+fKF7GMMfPON9l4VkagXmVvzTADWAnmNMaeMMR2B34AkwEJjzDZjzB8AjuPsBv4B9gDzgK6O4/hFVmwiIiJPIrD40+Iji584mU2VKiiBa5ivIdP3T4+ECB/ussceMiRJR6qEqe63VasGy5fDvXtgjGFk/ZFM2TuF4ZuHP/H9fX1tRdu7d4PaZu5cyr8JapDzYjeOTG/Ojz/a5KlbN/jjj5DXl8pYilwpcjFpd9BWQVeuwPUCv/Ju2XcxxjxxTPJwnp6wcqWdXiwiEtNFZjXj5o7jZHAcJ47jOJkdxxnpOE4ux3GyOI5TLODnzWD9v3EcJ6fjOHkdx5n7qHuLiIhEpcBkdsOZDZTJ9GTF9lOmtFulgB0FnbJ3SiRE+HBXMo+lVZFWIdo8POyI3Nat9jieRzxmNp/J0mNLeX/++/j5h//75NWroWVLKFIEdpzdQ62/azFg9TAa+I1n+vevMnIk1Kxp+7Zsaae7btoETZoE7X36zYvf8P2q7+8XyPpnyX58siygScEmz/z8EpKnJ6xYoWRWRGIHTQgRERF5jDNnwD3NETIkzvDYLXkeFHxkNmvyrNzzu8fRK0cjIcrQ7t7z53r6OdTNUzfUuVKlQu4ZmiBOAsa9Oo7k8ZPTcFJDbvjcCNd7HDhgR1wrVHRo/c8b9K3Wl6ZuE6iYL3eovgkTQt26NpH18bHrMQFSJkjJlKZTaD+9Pa3/a82XO5rRq/AYPNw8nuq55eGUzIpIbBKuZNYYk8cYs9gYsyvguIgx5vPIDU1ERCR62LoVjieZEGLdaXgFT2YB3i79NkM2Rdz61Iu3L9JraS+q/FmFpv825e8df+N1ywvve958Mv8rUntXIL5H/FDXlSgRNDIbyBjDl1W/pHWR1lQfU53fNvzGpduXQl0b3MGDkDs3ZCi7Evcb2SmTqQy7d4ddVRdswaGVK+HHH+GXX4Lac6bMyYZOG/iw/IdkW7GIli8VDvsG8kw8PeHcOSWzIhI7hHdkdjjwCXAPwHGcHUCzyApKREQkOtm23WHt1Sm8mv/VJ742cJrxuXOwYwc0yNuAeYfmhXvk81G2n9tO9dHVyZkyJ9OaTeOLKl9w4toJmk1pRtW/quL4JKTyzbD3kS1SxMZz8aLdhzR4wt20YFP+bfIv/o4/r4x/hSveVx4aQ2Ayu9HjZxJu+xDgkclskiSQObMtPuThAUeOBJ2L5xGP3EmLwu1UJEv2xB+HhIOnp/2dNatr4xARiQjhTWYTOo7zYHVh34gORkREJLo5fx7iZN1IgbT5SRIvyRNfHzgyO28eDB4Mcdzj8EWVL3j1n1fxuuXFtTvXnjq2z5Z8wfcVRtKmaBtSJkhJ4XSF+bTypyxus5gNb2ygTvL/kT5N2NOiEySwBaD+/NPuQ9qwIdy5E3Q+W/JsdC/bnc8rf84r41/hxLUTYd7nxAlInu461/3Pc+twMXx9bYIcnt3zypaF7dtDtq1dC+XKhfMDkCfm6Wm/YEn6+N2lRESivfAmsxeNMTkBB8AY8xpwNtKiEhERiSYWrbjB+WLv806Zd57q+pQpbTJ75IjdEgWgScEmtCnShib/NqH2uNrU/rs2F25deKL7bji9gcMHDcN7lwZg/nybWAa3dClUrPjwexQsCP372wrDderYZDu4v/+GeMfr8UvNX6g7vi5nbpwJcd7f3xZxWnZ8MTVy1KBUKTt9OEWK8D1DwYJ2FDfQsWPw0UfQtm34rpcnlywZ9Onj6ihERCJGeJPZrsBQIJ8x5jTwHvBWZAUlIiISHVy6fYlPdjSgVZ5ulMv8dMOFqVLZacZHjthiSYFaF23NsnbLWNtxLV1Ld+WNmW+E2mv1UXot+AFWfHE/gR02LKigUqCFC+Gllx5+jxIl4IUXbPLZvTuMHm33xAWbpPbrBxs3Qvks5fmhxg98sOCDENefPGm33Jl3aB61c9Xmxx/tdOoaNcL3DIUKBSWzt25B48YwdKiNSyJP166ujkBEJGKEK5l1HOeI4zg1gDRAPsdxKjmOcyxSIxMREXGh3adOkPebl/Bb+QE96z59mYjAacZHj9q1olev2nY/Pzty+u+/UC9vPTIlycSEXRPCdc8T106w7dAF+n9UCjc3O114927YuTOoz6lTdhQuySNmRnfoYEdmwVYa7t4dPvzQJrKbN4O3t70PwMu5X+au312WH1t+//qDByFXbod1p9dRLnM5kieHAQPgs8/C99nkymXvAfDxx/DWW1C6dPiuFRERCW8142+NMckdx7nlOM4NY0wKY8zXkR2ciIhIVHEcWLIEjh8H73ve1PijGW1S/c6xhXWeaX1hihR2ZPb2bSheHPbvt+3jx9spuYFTPj+t/CnDtwx/bIyXL8PgDUOJs+0tXnoJcuaEPXvsucBkdvRo+OEHO3X4UZIkgXTpgo47dABfX/jgA+jVyyalgclszZrwWYWv6Lem3/3+Bw9C4mx7yJMqz1NtoxMnjv29dasdte7Y8YlvISIiz7HwTjN+2XGcq4EHjuNcAV6JlIhERERcYOtWm8R16QJ53/qCpMda8XOP8vcTrqcVNy5cu2YLLuXLF5TMbtliR0FTp4YrVyBz0szEcYvzyD1oN2yAwsXvMH7TTBrkfg13d8ifH6ZNs0WTrl6F06dh4ECbRDdt+mSxGmPXzxYsCC1aQMuWdtqw48CaNZDavxC+/r7s9doLwKFDcCjhBJoUaPJ0Hw62EnLXrtCzp31/ERGR8ApvMutujIkXeGCMSQDEe0R/ERGRGGXWLJtQ/Tb+ECmLrmHhd29GWHJ15w7kyGG3owksArVzJxQubNeN7tpl21oXac3fO/5+6H3WrIG01f7h9OJGtGpuqxTnyweTJ9v7ZMwIQ4bYAkp9+kCGDE8ea9y4doS0ZUs7curnZxPaW7dsZef3yr7Hz2t/BuDwEYetN2dRL0+9J3+jAIUK2VHr6tWf+hYiIvKcCm8yOw5YbIzpaIzpCCwERkdeWCIiIpFj9264ezd0+7x5UKsWfLr4UwbW/x7PLOH9X+TjpUplk9l8+YKSWS8vu31N4cJB04Mb5W/E5L2Tued3L8z7rF0LptRQBrXtQpkyti1fPpsMFypk94797Tdo0CDCQidevKD4zp2D2rlqc/TqUbac3cK+m2splaUYCeIkeOr7N2xo19lqVFZERJ5UeAtA/QB8A+QP+OnrOE6/R18lIiIS/bz7LixbFrLt3DmIHx+8/A5y2fsyVbJWidD3TJUKsmeHrFntOtNz54LWqgYfmU0cNzF1ctdh0u5JYd5n68XV5E6XhbdbZ7yf/OXObRPBggVtYpwtm32fiJI5s/288uWzI7PGGAbUHkDr/1pzvHAX3irV5ZnuX7AgVK0aMbGKiMjzJdzVGhzHmQvMjcRYREREIt3+/bB6tS1odPGiXbO6cKEdle2/rj89yvWI8PdMmdKOzLq7Q4UKdiSycGF7LngyC9C9bHfqTahH4/yNQ4x4nj4N14p8y6eVvw1x74QJ7frWLFnsNjwpU0Zs7Jkz26rLlSrZJBygUNpC9K/6J99PL0j5LIki9g1FRETC6ZEjs8aYVQG/bxhjrgf7uWGMuR41IYqIiESMGzdsIaY1a+x04woVbPvOnZC14Dk2nN7Ay7lfjvD37dXLFmgC6NwZfvklKJlNmtTu7Rq4xWz6xOl5s+SblB1Rlk8WfcKuCzbTHbN4AylTuFM0fdFQ9//7bzs6mzYtvBzB4WfObPearVzZjswGSnG7DLmzKZEVERHXeeTIrOM4lQJ+P2KXOhERkZjhwAGoUsXuofrnn3DihC1stHcvnCnRi08rf4qbibi1soHy5w96XbKkHY0tGiwnzZoVjhyx2+wAdCzRkdfytmTe4Tl8vPBjbt27xcGj3nxW6M8Ij+1xMme2iXLZsjBzZlD7kSN26rSIiIirPPb/2MYYd2PMvqgIRkREJDLt328rChcuDBMm2K1r9uyBg9e3c+rOfhrlaxQlcSxfbvecDVS/PkydGrLP173jc2nVq8xpOYc/G/xJxb3rqFmsYJTEF1zmzDZpzZQp5Mjs0aN26rSIiIirPDaZdRzHD9hvjPGMgnhEREQizb59tpBRlSq24m+pUjB+9UpOlmrL4DqDMVFUUjdx4pDHDRvavWID+fvDxIl29BMgR4ocHD/mRrZsURJeCDlzQsWKNuabN4PajxxRMisiIq4V3rlUKYDdxpjFxpgZgT+RGZiIiEhECxyZbd8e+veHC+nGM/LEx9S5NpsCaQq4LK5UqWyyeOyYPV671iaRgceOA76+dt/XqJY+vZ2S/SBNMxYREVcLbzXjLyI1ChERkSgQmIC5u8PeS7tYcPV3bvy+kNJfJ378xZGsYUOYNQu6dbOjsh9+CH362HNnz0KGDC4ND7DFs27ftkn1hQsRXzlZRETkSTyumnF8Y8x7QBMgH7DacZzlgT9REaCIiEhEmDwZ4sULGt38btV3/FjrWzKkSkwB1w3K3leiBOzYYV+vXWu3Crp3zx4fPGj3k3W1dOnsutn586FGDYiiWdkiIiJhetzI7GjgHrASeBkoALwb2UGJiIhEpO++gy1bYEbAApnDlw9z6vopqmStQrVqUKSIa+MDKFDAFqO6c8eOHMeJE7Rtz4ED0SOZTZ/eJrPjxtmRYxEREVd6XDJbwHGcwgDGmJHAhsgPSUREJOLMng3LltnfHgH/1xu1dRRdS3fFGHN/j1ZXS5LEFljas4f7I8XZssHx43Zk9qWXXBoeYCsa//ILHD5sR5JFRERc6XEFoO4FvnAcxzeSYxEREYlwAwbAiBFBiazjOMw+OJt6eeoB0SORDZQpE8yZE7QHbbZsdguc6DLNuEcP6NIF/voren1uIiLyfHrcyGxRY8z1gNcGSBBwbADHcZykkRqdiIjIM/D3t9Nis2QJattwegNF0hUhQZwErgvsIQoWtFN4Bw+2x9my2enRR46EfAZXSZgQXnzR1VGIiIhYjxyZdRzH3XGcpAE/SRzH8Qj2WomsiIhEa8Gn7AaauGsizQs1d01Aj1GokN0LN3BkNnt26NcP3n/frqMVERGRIOHdZ1ZERCTGWbsWypcP2bbyxEqqZa/mmoAeo2BByJw5aMub3LmhcGFo1cq1cYmIiERHSmZFRCTWWrcuZDJ76fYlEsVNRHyP+K4L6hEKFoTevYOOM2Wyz6BRWRERkdCUzIqISKy1bVvQlF2A1SdXUzFLRZfF8zjx40PHjiHbVGhJREQkbEpmRUQk1nIciBs36Hjl8ZVUyVrFdQGJiIhIhFEyKyIisdLduyETWYA1p9ZQIUsF1wQkIiIiEUrJrIiIxErXrkGyZEHHd3zvcM/vHknjqRi/iIhIbKBkVkREYqUHk9kd53dQNF3Rh18gIiIiMYqSWRERiZUeTGY3ndlEyYwlXReQiIiIRCglsyIiEis9mMxuPrOZUhlLuS4gERERiVBKZkVEJFa6evWBacYXdlA4bWGXxSMiIiIRS8msiIjESteuQfLk9rX3PW/cjBvxPOK5NCYRERGJOJGWzBpjRhljLhhjdgVrS2mMWWiMORjwO0VAuzHGDDTGHDLG7DDGlIisuERE5PkQfJrx9vPbKZK2iGsDEhERkQgVmSOzfwG1H2jrCSx2HCc3sDjgGOBlIHfAT2dgSCTGJSIiz4HgyezO8zspml6VjEVERGKTSEtmHcdZAVx+oLkBMDrg9WigYbD2MY61DkhujMkQWbGJiEjsFzyZ3XtxL/lT53dtQCIiIhKhonrNbDrHcc4GvD4HpAt4nQk4GazfqYC2UIwxnY0xm4wxm7y8vCIvUhERidEeTGYLpCng2oBEREQkQrmsAJTjOA7gPMV1wxzHKeU4Tqk0adJEQmQiIhIbBE9mz944S/rE6V0bkIiIiESoqE5mzwdOHw74fSGg/TSQJVi/zAFtIiIiTyUwmb159yaJ4ibCGOPqkERERCQCRXUyOwNoG/C6LTA9WHubgKrG5YBrwaYji4iIPLHr1yFpUth3cR/5UuVzdTgiIiISwTwi68bGmAnAC0BqY8wpoBfwPfCPMaYjcBxoGtB9DvAKcAi4DbSPrLhEROT54OsLceLAXi+tlxUREYmNIi2ZdRyn+UNOvRhGXwfoGlmxiIjI82uP1x4qZ63s6jBEREQkgrmsAJSIiMiT6tgRrl59smu0LY+IiEjspGRWRESirXnzwM/Pvj51CsaNg1GjHn/d3bt2ijHA8WvHyZo8a+QFKSIiIi6hZFZERKKl4cOhVSuYNMkez5kDn30GY8bA7t2wdu3Dr712DZInBx9fH+K4xcHN6H93IiIisU2krZkVERF5WocO2RHYzZuhcWN4/XWYPRt++gl8fODNN22l4tmzw77+6lW7Lc/BywfJkypPlMYuIiIiUUPJrIiIRDt//QXvvQdZs8ILL0CLFnDyJOTODV9/Df7+UKrUw68P3GN2j9cerZcVERGJpZTMiohItHDsGKxaBa+8AjNnwuef2/Z+/WD9evD2DurrFjBr2N8/6HVw27fbRHiv114Kpysc6bGLiIhI1NMiIhERcak7d+wobJs2sG8flC4NFStC/Pj2vJsblC8P1avbY19/X6bvm45fkVGcPu2Eut/du/Dbb/DWW7Dn4h7tMSsiIhJLaWRWRERc6vffIVEiWL4cjIE33ghKZINzHIfp+6fTd0VfqnhWwS/DTbrN28i0ToMxxtzv99df0LAhpEwJhy8fJmeKnFH2LCIiIhJ1lMyKiIhLzZ9viz0F5qNZH9hF59bdW8w8MJOhm4eSK0UuZjWfRYYkGRiw32Hi1dYsOLyAFJdrMXq0TYzHjIFp0+CGzw083DyI4x4nyp9JREREIp+mGYuIiMt4e8OlS5A5c9jnd5zfQZW/qrDXay9/1PmD4fWHkyFJBgBy5jSUvN6Xr5Z/xfQZDn//bdfKJkoEqVPD0mNLqZatWhQ+jYiIiEQlJbMiIuIyK1dClSphn1t1YhXtprVj3Kvj+KraV+RNnTfE+Rw54PLh7JTMUJJ/9o2le3do2RJee82en3doHrVz1Y7kJxARERFXUTIrIiJR7sYNyJkTPvsMatYMfX7q3qm8N+89ZjafSb7U+cK8R/bscPQofFDiG85m7U+jdic5fBgaNbLra9ecXEOFLBUi+UlERETEVbRmVkREotzq1XYLnvLloVqwmcD3/O7xyeJPOHj5IAtbLyRFghQPvUeCBHDzJgwdkJQmiQfx9tImrNgyjdSp07P25DpypMih9bIiIiKxmJJZERGJcitW2BHZevWC2nz9fWk4qSFVPKvQ76V+uJnHTx4aNw6GD4cP36yEV6LvaTO7Gp6bPbl19xbD6w2PxCcQERERV1MyKyIiUW7lSvjoo5BtXy79knKZyvG/Sv8L932KFIFBgwKPXmDXW7s4d/Mc6ROnx93NPcLiFRERkehHa2ZFRCTCfPUVrFr16D63b4OPD6QINoN46dGlbDm7hc+qfPZM7+/u5k6mpJmUyIqIiDwHNDIrIiIRwt8f/voLDh+GAgXg1Vdh6VK7f+yePbbKcKFC4OEB5coFXXfz7k3eX/A+M5vPDNfUYhERERFQMisiIhFk82aoVAl27YKvv4aNG+H0aUiaFFq3hn//tYnt5ct2ejDYqsNd53SlR7keZE76kM1mRURERMKgZFZERCLE9OnQsCHkzQsjR8J778H69XDhAjRvDgULhr5m5NaRuBt32hRtE9XhioiISAynZFZERCLE/PnQsydUrQo1asCVK7BsmZ1iPGBA6P6jto5iwq4JzGw+M8pjFRERkZhPyayIiDyzs2cheXJInNj+pE4Nqw7sYuEPyeFGJnLkMPf73rx7k08Xf8qZG2eY1XwWCeIkcFncIiIiEnMpmRURkWe2dClUrx50/N3K75h3eB778yQiabrL9F5WG3fjzvLjy7nmc432xdozoPYAjDEPv6mIiIjIIyiZFRGRh7p8GeLGtaOtj7J4MXTubF8PWj+I3V67WdxmMW+u8qDeC+dx0q/lnt89OpboSMYkGSM/cBEREYn1lMyKiMhDffUV5M4N3boFtR04AE2aQP78djuetm1tJeOSJWH1idVM2j2JxW0W4+HmwbBh4OaWDmjoqkcQERGRWErJrIiIPNTCheD2wNavc+dCly5QrZpNZt99Fzw94dKd83Sd05UZzWcQzyMeEPpaERERkYiiZFZERMJ06pTdF/bQoZDtixdD//6QM6c9njsXjp2/zOuTX+enmj/hmcwz6oMVERGR546+MxcRkTAtXgxt2sDp00Ftvr5w4gTkyBHUtuncWprMqk6Pcj2okaNG1AcqIiIizyUlsyIiEqaFC6FmTTs66+dn2zZtglKlbBvAn1v/5H+L/sf0ZtNpkK+B64IVERGR546mGYuISJh27oSiRSFLFjvlOGtWmDbNJrgAa0+uZeTWkSxus/j+GlkRERGRqKKRWRERCeXkSciUyRZwypXLrps9dQoWLYJXX4ULty7w1uy3GN94vBJZERERcQmNzIqISChr10L58vZ1zpxw8CCMGAF9+4Jj7tFqaiv6vdRPxZ5ERETEZZTMiohIKGvXQt269nWuXNDhk51krrCKk2ndqfrXX7Qs3JKaOWu6NkgRERF5rmmasYiIhLJ+PZQpY18fTziF2y+8TYvmcNfvLsPqDaNrma6uDVBERESeexqZFRGREM6etVvwJEkC132uM2hnH/b3WUzqhKldHZqIiIjIfRqZFRGR+/btg5dfhh9/tMf91/anW+luSmRFREQk2tHIrIiI3DdsGHz7LVStCo7j8N++/1jTcY2rwxIREREJxSUjs8aYHsaY3caYXcaYCcaY+MaY7MaY9caYQ8aYScaYuK6ITUTkebZqFbzwgn295uQaimcoTsI4CV0ak4iIiEhYojyZNcZkAroDpRzHKQS4A82AH4D+juPkAq4AHaM6NhGJfP/9BydOuDoKCYuXFyRMaH8AxmwfQ+sirV0blIiIiMhDuGrNrAeQwBjjASQEzgLVgckB50cDDV0TmohEFMcJffz559CggU1qt2xxTVwS0t9/29HY6dOhWjXbdvLaSbac28IL2V5wZWgiIiIiDxXlyazjOKeBn4AT2CT2GrAZuOo4jm9At1NAprCuN8Z0NsZsMsZs8vLyioqQReQhBg6EP/8EH5/Q5w4dsvuTXrkS1LZ5M5QoYa/ZuhVat4Zbt2z7ypVRF7dY589D8+Ywbx506ABdu0L16vbcl8u+pFfVXrgZ1QkUERGR6CnKC0AZY1IADYDswFXgX6B2eK93HGcYMAygVKlSzmO6i0gkOXYMJk6ELFkgUSJo2jTonOPA229DzZrwww/Qrh3cvAnTpkHDhlCsmP2JGxcmTYJRo+DaNVi4ENKnd8XTPH/u3oU6daBXL6hXz7ZlyADlysGcg3M4c+MMdXLXcW2QIiIiIo/gimrGNYCjjuN4ARhjpgIVgeTGGI+A0dnMwGkXxCYi4TR+PHTpAsmSwbZtIc/16wf588Mvv0CZMrB8OXh4wNGj8MknQf06dLAjtfXrw2uvQffu8M8/UfoYsZLjwPffw7vvwoULdt/Y8uXB399+qeDhAQMGQJMmQYkswEsvwYLDC+i9rDfzWs3DGOO6hxARERF5DFcksyeAcsaYhIA38CKwCVgKvAZMBNoC010Qm4gA3t6weDHUrWuPp061o6qtW9uEx3Fs25IldqrquHFB106cCGvWwJQp4O4O8+dD8uTg52eT2kSJ7JYvCw4vYMKuCWR6My4ZyhUgUb7SHDtVgqtXE5A8uQseOhZZvdr+mcydC9evQ/z4dvrw7NmQIgXcu2f/HGbNCrrmwq0L/Lj6R7af387M5jNJmSCl6x5AREREJByiPJl1HGe9MWYysAXwBbZipw3PBiYaY74OaBsZ1bGJPI+OHIE7d6BAgaC2Tz6BpUttMnTokJ3627mzXVO5cCGcOwc5c0LSpDYpOnIk6NoRI2xBIY+A/7qkTm1/u7s7lKh0ib93zGPwxsEUTFOQrqW74pR22HVhF3/v+JsTtd6iz8Rv+eXNulH3AcQwvr5w+jRkzRr63PnzkCSJ/TP44w+4cQMKFrQJ7KhR9guKwD+PQI7jMGzzMP7Y/Afdy3Tn+xrf4+7mHjUPIyIiIvIMXDEyi+M4vYBeDzQfAcq4IByR59q339ppwhs2gJubHT3dv99WGh41Ct56CwoVsn0bN4Zly+x62ToByyn9uYd/3Ft430mCh7s7ly6FXPe6x2sPPRf15MS1E6RMkJLq2avzT5N/yJw08/0+ZTKVoUPxDrTNepFXxjSg1dmMlMhQIqo+ghjlr7/giy9g925I+cDg6Rtv2C8a/PygYkUwxq5/HTp7KCfin2DJIk8KpSlEwbQFyZosKyeunWD4luHkTZWXNR3WkCBOApc8k4iIiMjTcEkyKyLRw507sHGjnYL699/w+uvw/vt2CrG7u02OAPZd3MeILSOYn3Qtydc3J86ONxg3Jh4nr52k8T+NOVs5CRVH+NC/5DyKF098//4bTm+gy6wu/FHnD8pmLvvYeMoVTk26bT/Td9m3/Nd88mP7P298feH3323Rpg8/tF82BLp+3a6NHTHCrpP1d/zoOrsrl7wv8dNLP5EzZU5OXDvB7gu72XVhF6tPrCZDkgwMrTuU3Klyu+6hRERERJ6SklmR59jMmXaE9cMP4eWXbXL0+utBU1g3ndnEd6u+47rPdbqX6c67pT6mVOfh3ChShk/WF2fz2c0MqzuMJRfKcyH+eN5c0pTuFSYDCdl4eiNdZnVh2uvTyJo8jDmxD1E+Szn2XL7O7gu7KZi2YOQ8eAw1aRLUqmULb82dC4sWQZUqcPmyXb9crx4ULQr3/O7RcmprCqctzB91/7h/fbbk2ciWPBt18qhKsYiIiMR8SmZFnkOOAz//bEfx/vvPTldds8YWBHr5ZYclR5fyw+ofSBgnIT0r9gwxqlrk2mfkM91oUXIPpTOVxsPNg3MF4OziFsS/7cOI5DU5sagy8w/Pf+JEFmwV5OQeXRmzfQw/vPRDRD96jDZ2LAwZYqcPDx5sC3QlSWKTWX9/mDwZvO9503xKc6pmrUqP8j1cHbKIiIhIpFEyK/IcWrXKJq+rV0OqVLbt0p0LrE74E73/XEiRdEXoX6s/BdIUCHVtly6QM2cyimcpf7+tRg07MphgX3sG9i3CRW8vPqr40VNVxM2fH7zW1WCR6fPUzxcbXb5spxJnz26PM2WCvn0hcVI/chW4wb8T47HVdyotR/1E9zLdaV+8vWsDFhEREYlkSmZFnkOjR9s9SAMT2U1nNtFhegc+rfwpfav1JZ5HvIde+9produSJIFBgwKPSj5TbPnzw59/JiJ9gfQcuXKEHClyPNP9Yovp06FBg6Dj2/duM93/XTbt3UTyo8m5EfcGtS/WZm7LuaRPnP7hNxIRERGJJZTMijxnbt+GTZtg2DB7fP7meTrN6MS0ZtOiReKYLZutlvxGnnrMOjCL7mW7P7Sv49gpt7Gd49h9Y4cOtce+/r68PO5l2hZty/D6w10bnIiIiIiLuLk6ABGJWv/8Aw0b2m14AN6e8zbfVP8mWiSyYKsou7lBzex1mHVg1kP77dgBb74ZhYG50ODBkCuX3dsXYOimoVTNWpUOxTu4NjARERERF1IyKxKLHT8OPj5Bx76+MHAgdO1qj2fsn0E893jRrrptzpxw1ysL13yucd3neph9Nmyw1ZgdJ4qDi2Lr1sH48fDrr/b4ivcVhm0Zxv8q/s+lcYmIiIi4mpJZkViseXO7V+yCBZA7N7RtCy+9BGnSwNkbZ/ly6Zf0r9Xf1WGGkj8/7NkDtXLWYsHhBSHO9egB9+7Bzp22gu/hwy4KMgpcvGhHn8eNg/jxbdtvG37j7VJvkyhuItcGJyIiIuJiSmZFYqlDhyBZMkicGHr2hMWLoUQJ+OgjuON7h5ZTW9K/Vn/SJU7n6lBDKVkSNm6EunnqMvPAzBDnxo2za3537rSJ+ooVLgoyCrz/PvTubdcRA9y6e4t/9/xL22JtXRmWiIiISLSgZFYklho/Hlq2hN9+g7VrwdMTPvgA4ia5ToOJDWhWqBnVsldzdZhhqljRbhtUKmMptp7dip+/H2BHZC9ehKVL4dIlu/Y3NiWzjhM0bXrTJrhwIWQF4z82/UHrIq2J7xHfNQGKiIiIRCNKZkVioWvXYPLkoEJP8eLBkStHeH/++1T5swodi3ekc8nOrg7zoVKkAG9vuOvjRlaPMqw7tR4ALy8oVgwmTICMGaFoUdi8Gfz8XBtvRPnhB/jsM5vQfvwx/PhjULXmczfP8ffOv+lWpptrgxQRERGJJpTMisQyJ09CrVrQq5edYuw4Dj+t+YkWU1pQybMSmzpvomnBpq4O87FKl7aVl+f8WpdJ2+xU43Pn7FTpu3ehcGHw8IB69WDIEBcHGwH8/W2SPneu3TYpVy77jIE+WvgRvav2JkGcBK4LUkRERCQa0T6zIrHEb7/B2bMwZw78/jtUqAD+jj+dZ3YmUZxErGy/kjjucVwdZrhVqgRdukBOz5dYePhr4DvOnYP06aFaNShSxPb77DOHUi8dpVFjTzJliLn/SVu0yP6ZVaoEb70FBw4EnRu3Yxx+/n7Uz1vfdQGKiIiIRDMamRWJBbZsgenT7Wjm0qU2KfLz96PjjI5kSJyBX2v/GqMSWYAXXoD69aF9q0TE90vL0StHOX/eJrM//mgrNd+6e4vqE8pxvdbrfDrT9VWZfXyCqit7ez/ZtkF//gmdOkGzZrBypX1OgG3nttF/XX+G1h2KCZxzLCIiIiJKZkVig99+g08/tWtkkyeHu3536TCjA55JPelTrU+MTIIyZrSVi7Nnh2x36zLrwKz7I7NJkoC7O/RZ3of2xdrzaYZlLLowlju+d9i923Uxz5tnv1CYORMKFoTBg8N3nZ8f7N5tp1C7u9u1wAAHLx2k3bR2THptEkniJYm8wEVERERiICWzIjHY2bN2neXOnXYkE+DCrQvU+rsWxdIV46tqX8XIRDa4rFkh8Zm6zDoYlMwCHLh0gNUnV9O5ZGdyZElELp8mjN42hvLl4dYt18S6c6fdTuerr+Dvv2H4cLvONyw+PnDkCNy5A9u22cJWwf+otpzdQpN/mzCm0RhypswZFeGLiIiIxChKZkViKMeB11+301qHD7eJ0NkbZ6kzvg6fVvqUHuV7uDrECJEtG1w64skV7yucvHDjfjL7/arv6VW1F27GjUyZIOPpbvy2bgg3bvmybp1rYt21C157zW6rU6GCLcLVt2/YfRs2hK5d7dTiJUvgxReDzi06sohOMzox9fWpFElXJEpiFxEREYlplMyKxAA3bsCaNXbLHX9/W813zhzImxc+/9yO6p2+fpp6E+rxc82feSnnS64OOcKkS2dHN2vmrMm+ewtInx5OXjvJvov7qJGjBmCnJF88mYKiSWqQrPxkl+09e/CgrUIMcNn7MisSvM/4u6+z/eThEP2uXoUrV+yf4blzMGoUVK9uz805OIcvln7BvFbzyJEiR9Q+gIiIiEgMomRWJJpbvx7KlIG//oKXX7ZrMitUgLffhi++sH0OXz5MvQn1GPjyQKpkreLSeCOaW8B/pernacDJ9L/jbbx4c/ab9KzU8/4U6lSp4PJlqOTxPvGr/8zyVffuX3/kSNTEefeujdXDw65ZrjO+DsUzFKNpjrd5ZUxDvG553e87bx7Urm1H0/v0saPsWbLAiuMr6LWsF7OazyJtorRRE7iIiIhIDKVkViSa69ULJk60e4+uWQObN9tprEePQqbMfkzcNZHG/zRmVINRVMhSwdXhRoo0aSB7vNKkOtmewkMK81r+10JsUxO41vTaqQxUT9+Yfel7cfeuTRJr1YqaGA8csCPlYAtTNcrXiDZF29C3Y1USb+7FZ0s+4/Ztuw/wrFl2f1ywX0xs3gybz2zm3XnvMr3ZdFIlTBU1QYuIiIjEYDF3U0aR58CqVbZyb2B1W7BTbCfumsi289vYeX4nNXPWZH6r+aRLnM51gUaybNlgzx7IfKk1qz5sHWafhAltReBub33MspM1mbRyM/VLlXxoAaaItnMnFCoER64cYcnRJaxsvxKAtGkh07XG7D8/jM8Hb2La4FK4udnKxQCO4zD54BgGrB/AlKZTyJgkY9QELCIiIhLDKZkViabu3YMPP4TRo+2x4zj8vPZnJu2exNul3ubjCh9TOF1h3Ezsn2BRvDh06GCnWD9Mxox25LpfPzdqxvuCv/YMonzWv7h5036WcSJ5m90tW2xF6W9XfsvnVT7H3c39/rlaNQ1+zq/0O9OF3auWkzSJG8bAdZ/rvDnrTeJ7xGdF+xUkjps4coMUERERiUVi/9+CRWKgGzdsYaf69e3UVcdx6LmoJ3u89rC241raF29P0fRFn4tEFuDNN2H/fhg79uF9MmWC06dtwajSaapw+MYuDp+5DNiCS5Hpzh1YsAByljzK3ot7eTnXyyHO16oFK6YUINHV0kw+MYgkSWyBqJfHvUzdPHUZ1WCUElkRERGRJ/R8/E1YJBo7cQJeecWOHgJMmmTXUcaNCx99ZNsGbRjEhdsXGFl/JB5uz+eECg+PR4+uZspk96Q1BtKnNxT2a8ff+4YAtnJwZBo7Fpo2hZ83fMunlT4NtbdvkSJ2L9kuub5h6bGltJjSgqp/VeWzyp/RonCLyA1OREREJJZ6Pv9WLBLFVq+G3Lnt+skH/fIL3L4NP/5oE9i5c+102SRJ7Pl/dv/DzAMzmd1idqgkSYJkzGiTWbCfs+eKTiyM8xImW2WuXIm8Cs/HjsGgQTB6+jG6Ld3DsNzDQvVxc4Pu3eH11xPwafbJLDm6hEqelUgYJ2GkxSUiIiIS22lkVuQpeXnBW2/ZQj7ff28r5wa3cKFNdCZNgp497VTTSZNC9rl0CVassFu1zJhhp8POnm0TWX/Hn6GbhvLbht+Y2nQqcd3jRtWjxUg5ckCePPZ1unRw+UJ8mppJxKn/DsfOX4qU9zx2DBo2hJEjYdCOPmGOygb69FPImRM83DyombOmElkRERGRZ6RkVuQJXLoEM2eCt7fdWuWFF2D5crvdyo8/BvW7dg169LCJzrff2muWL4d+/WDv3qB+335rR+zix4d16+Drr+3rVSdWUWlUJQ5dPsTsFrNJEi9JVD9qjFO2rB0hBTsye+EC3L2UkfxeX/D7oQ8i5T3/+gv+9z9wz7yFk9dP8kruVyLlfUREREQkNE0zFgmHY8dskZ8OHSB5cltl+P334fXX7flff7Ujr3fvQqdOMGQIdOsGL79s12smT277DR9uk9x58+ways2bQybBp66f4sMFH3LH9w6jG44md6rcUfqcsUWyZHaU28sLKqduzAqfcSw4vICaOWtGyP2/+84WpZo+3W6f1GDKx/xS6xdNAxcRERGJQkpmRR7BcWwCOmIEZM5spwvXqwfr19uRwEBx4sCcOTBqFLRubde+/vef/R24jtPP348kWY8QJ0USJk9Oz/ff25E9t4D5ERN2TqDfmn78UOOHCEu6nleBOaWXF5QoYUhw9Tc+XliHilkqkihuome+/++/w8SJdv/f3Vc3kCJBCoqkK/LM9xURERGR8FMyK/IQkybZEbgyZey61vjxg86VK2d/+zv+zD80n9HbR3PJ+xIlcpfgtwkdyJs67/2+d3zvMHzzcIZvGU6eVHk4Vv4ELf8uz7QfvqFQocT4O/58tewrdl7YyfJ2y0kaL2kUP2ns5O4O58/bwlvHFmbirZff4sulX/JzrZ8feo2vL6xdC5UrP/y+t2/bLygaNYJKlWDA+gG8V/a9iH8AEREREXkkJbMiAW7dsmtiM2e261d//dVOIU0cxvaf52+eZ+KuiYzZMYbSGUvTs1JPMiXJxKoTq3hz9pukS5SOwmkLc+7mOVacWEGzgs1Y3WE1SeIlwd/xZ0T50Xy6pTLr3Oqz8sRKymYqy79N/sXdzT3Knzu2Sp0aduywxaCuXIE3Sr5BjTE12Hh6I6UzlQ7zmj17oE0bOHr04fc9eRKyZLFTzU9fP83R3UepkKVCJD2FiIiIiDyMklkR7FY4XbvaRPbsWbvmcuLE0Ins9nPb+Xntzxy8fJCWhVuyoNUCUiVMdf98o/yNaJivIVvPbeXw5cNUyVqF72t8H2Jqq5txo3Pp9rxasB4rjq+gft76lMxYMqoe9bmRNi3EiwcpUthk1s248UfdP2gxpQVL2i4JcwR82za7PvrcOTjtdYMhKyeSJpsX37zcEzdj54MHJrMAgzcO5u3Sb2utrIiIiIgLKJmV557jwNtv261xPD3DOu+w4PACfln3C3Hd4/Jh+Q+pkrXKQxMYYwwlMpSgRIYSj3zf1AlT82r+VyPiESQMadPa0dnAZPbaNYhzPQ8fVfiIFlNaML3Z9FAj4du3Q4UKsHjVdd7b9DJ5qMvCLVc4f68TI+uPxBhzP5n1vufNzAMz6fVCLxc9oYiIiMjzTVvzyHNv0yYoVCh0InvX7y5/bfuLsiPKMnnPZH6t9Sszm8+karaqGomLAdKlgzRp7J69N27A2LG2wvTrhV4nb6q8jNk+JtQ127dDly7w+daWJNrxHqu++4RkG/sR3yMBw7cMB4JGZv/e8TdNCzbV/r8iIiIiLqJkVp57kyYFbbETaMqeKZQdUZYjV44ws/lMhtcfTv40+V0ToDyVwJFZNzc7+r5mDezaBadPw+dVPufX9b/ifc/7fn/HgYsXIVmxJZw8lIRmRZpgDGTOZHi/UD/+2PQHx64e4+RJSJfRh983/s7bpd924ROKiIiIPN9ckswaY5IbYyYbY/YZY/YaY8obY1IaYxYaYw4G/E7hitgkdrt1CyZMCDr294eFC6FmwE44juPw+ZLPGb9rPAtbL6RPtT6kS5zONcHKM8mRA3LlCjreswe++AJGj4YUCVLQqnArhm4eCoCfn10rnSGjwy9bviLr0d40bWqvK1wYDu1NxKCXB9FpRidOnvJnyfU/aFqwKSkTpHTBk4mIiIgIuG5kdgAwz3GcfEBRYC/QE1jsOE5uYHHAsUiE8fa226l88gmcOmXbFiywayTjxbPHQzYN4eyNs/zb5F9SJ0ztumDlmVWsCJ9/bl+7u9uR2mbN7JcZa9bY6sZjd4zFcRwaNLD7B6csthLPZJ6smZmH4sXttUWKwM6dUNGzIsXSF2NNzpeYc2IS75Z913UPJyIiIiJRn8waY5IBVYCRAI7j3HUc5yrQABgd0G000DCqY5PYy3GgY0do3Bi++QaG2gE5BgyA7t3t6x3ndzB6+2h+r/P7/cq1EjukSAHly9vq1HPm2IJfN7ySkz91ftadWseZM/Dzz3Ap1yC6l+lOunQQuCy6cGG7xU+PHpBy29ekP/A5qzusDlGhWkRERESiniuqGWcHvIA/jTFFgc3Au0A6x3HOBvQ5B4Q5t9MY0xnoDOAZVulZkQfMnw///QcpU9riPj4+ULq03YYHIH9+uH3vNh2md2BMozHE94jv2oAlwqVMaZNZsMWb6tSxCWrH4h0DphqXJ2fxk9w8cjbUHrT58sHSpZAnD3ivi0/GeNVQ/S8RERER13PF8JMHUAIY4jhOceAWD0wpdhzHAZywLnYcZ5jjOKUcxymVJk2aSA9WYrZx4+zoa40a0L+/bYsXD3751Y8bN2ybj68Pb8x8gy4lu1AgTQHXBiyR4uuv4cUXg47z5oX9+6FqtqpcvnWdS4X60nxKcz6t/Gmoa+PGhZw57T9HI0bY0X0RERERcT1XjMyeAk45jrM+4HgyNpk9b4zJ4DjOWWNMBuCCC2KTWOLzz23Bn2PHYPlyuz0LwP6L+/lo4Uccu3oMk9iwcls2zqw8Q4tCLehUopNLY5bIE7wQFNjR1pEjwc248U3xCTTa+B7fvfgdlbNWDvP6ZcuCph0XLBi5sYqIiIhI+ER5Mus4zjljzEljTF7HcfYDLwJ7An7aAt8H/J4e1bFJ7LBhA2zcCIMGQdKkNpF1HIc/t/3J4I2DGVJnCKUzlcbP34/TN07jZtzInDSzq8OWKJQ3L+zbZ197nYtHA/chVM768P6aViwiIiIS/bhiZBbgHWCcMSYucARoj53y/I8xpiNwHGjqotgkBti5E7ZssetdixWzU0HBJijdutntV/LksW1XvK/QZVYXksdPzvJ2y+8X7nF3c8czmdZdP4+SJYPr1+3r06chUybXxiMiIiIiT84lyazjONuAUmGcejGMNpFQunWDV16BFSvsKGypUnDmjN0v9IcfbJILsPL4SrrP687nlT+ncQEtdpQgSZPCtWs2mc2e3dXRiIiIiMiTctXIrMhT27vXTh3+3//ssb8/rF4NGTIErY30uuVF3xV92e21mxnNZpAlWRbXBSzRUr58tgjU6dNQqZKroxERERGRJ6VkVmKckSOhU0CtJsdxmL5/GuPOjuPCoQvEXxufu3538fHz4d2y7zKg9gCMFjxKGALXzWqasYiIiEjMpGRWYpQDB2DJEvjuO/Dz9+Pdee9y9c5VvnrhK7Imz8od3zsYDKkSpnJ1qBLNVasGvXvD+fOQMaOroxERERGRJ6VkVqKte/dg4kQ7jbhlS/D2hlatYNQo8PBweHt2N1IlTMWglwfdH31NHDexi6OWmKJ4cfD1hXPn7N7DIiIiIhKzKJmVaMXPD9zd7etp02D6dLsWdtUqOHECPvgAihZ16L2sN36OH32r9dU0Ynlqn39ui4mJiIiISMzj5uoAJOZbuRL++suOcD2tBQvsSFm5cuA4tm3UKDudeOBASJUKGjaE6nW9eHv225y9eZYhdYYokZVnUr68nbYuIiIiIjGPkll5Zj17wtmz8OqrdkpwoLFjIUsWGDcu7OsC+zoOfPklzJ4NhQrBsmVw/DjcuQO5cwM4vNR5MUtTN6XO+DqUyVSGoXWH4u7mHslPJs+DZMlcHYGIiIiIPA1NM5Zncviw3a/zk0/gwgWbwHp42N9JksCmTdCli13/2q5d0HXdu8P8+dCxI2TLBoUL2yI8Xbs6fPTVeTzupqZrV3dWnVhNr2W9yJQkE59W/pSi6YpqNFZERERERJTMyrOZOBGaNbOv3/34OmU7TqRoibu0+iIPVQrm4bbj0K3fGbq/mZg9B/OwdUMCSpSAkydhyxb480/o2xf++Ps8ny4ewIz9M7hcIBMJUnnx7SXIvyk/A2sPpGDagq59UBERERERiVaME7hAMQYqVaqUs2nTJleH8dy6cQMqVrRrZjdeWsQHCz6gdZHWpIifgj1eezhy9Qhuxo0MiTNw5uJNtpzeSY40GUh9pS4Nq2XmpjnDmpNr2H5+O6kSpOL1gq/Tvnh7PNz0HYuIiIiIRFObN9vfJUvG7PeIIYwxmx3HKRXWOWUN8lTOn7fb5XzxBey6tppPFn/CotaLSJMozSOvO3z5MHMOzmHfjQ2kSZiG7mW7UyRdESWwIiIiIiLyRJRBxCBnz9ptaiLC7du2WnCKFHaasHs4ainduweNG9spwgkTwkcfQdyCc3hvfi+mvT7tsYksQM6UOXmn7DsR8AQiIiIiIvI8UzXjGOLECciZE9avf7b7nDtn71GvHly9atesbtwYvmsHD7YzHbZuhX/mnuY/2vLbht+Y13IemZJmerbAREREREREnoCS2Whuzx6bfH7yCfTpA599FrQP6+OsWBHy+OZNqFXLJrDvvQevdtnDpVr16LHoLfZ47QnR99Ytm7zOmGHf7/x5e123Hrfpu7wv9SfWp2mBpsxuMZtUCVNFzMOKiIiIiIiEk5LZaGL5cihdGooVs4mmlxcMG2a3sxk0yPb58EO7fc2CBY+/3/HjUK0anD4d1NarF3TrBn/8AWczDqP99Pb0fbEXzu4mtP7v/+3df6xfdX3H8eeL9hZQEKQgMbalDPFHnVCLm5ShQywOrT8W0jBQxo8QyRKXSBSmsEQosybIJmziXJSiRQQ1IEpMBApFh0ZgMOoqBbPSSCgDC6s/YBoo63t/nFP6pVZUlu8993Cej+TmnvM5595+br/v3HNf3/P5fM5fcs3aa58+98wzYf16uPxyuOAfNvMXp9/JQX/9Md78pUN50c4v4tZTb2XxKxb7mBxJkiRJnXDObIcefRRmzoTVq+HDH4arr4bZs5sQ+853wqJFsGoV7Lbbtq8577xmjutRR8FOz/JWxPXXN8F4xQo4+2xYt665w3vBBXDj+hv53gPf49snfZtdJ3blb9fCuSfdyHGfPI6/+rO1vPYXZ7JhwzSWX/kof/edZSxddROz5hzCya//U/7lNbfygokXjPu/RpIkSZKelY/mGaMq2Hrjct06OOUU2HlneM97YO5cOP74JmiuXAlLl/7uK2+ffjq84Q3N1/8mxxzTDEl+3/ualb1PPhlOOKEJwVtf8613VU88sRmS/NlLnuK9l5wDL/8Wf/SK2fzXL+/nrMPP4u1zl7DrLtOY7lsfkiRJGjofzTOpfDRPRz76UZgxoxkafPHFsHw57LsvfO5zcOWVcPvtTcB8yUt+vzr94AfhtNOeGWY3bYI3vrEJx8ce2wwRXrAAFi9uhhtDc6cX+LWhwUuWNF/71kXTeWTRMjb96kM89sRjzNljjsOIJUmSJE1J3pkdo82b4aKLmsWTzjkHdt/918/ZtAm2bIG99/79vvfBBzerCm8danzGGbDffnD33c3820WLts21ve++5rz99/9//TiSJEmSvDM7qbwz25GJiWYhpWez117P7Xu/+tVw770wbx6sWQO33ALnn988L3b79ycOOOC5/RuSJEmSNFUZZnvqsMPg+9+HjRubYcdXXNEEWdg2T1eSJEmSnq8Msz21cCF8/OPN3Ngbbmjm4kqSJEnSUBhme2r+/ObxO5ddZpCVJEmSNDyG2Z6amIDvfrdZsViSJEmShmanrjug584gK0mSJGmoDLOSJEmSpN4xzEqSJEmSescwK0mSJEnqHcOsJEmSJKl3DLOSJEmSpN4xzEqSJEmSescwK0mSJEnqHcOsJEmSJKl3DLOSJEmSpN4xzEqSJEmSescwK0mSJEnqHcOsJEmSJKl3DLOSJEmSpN5JVXXdh+csySPA/V3347fYG3i0605oyrAeNMp60CjrQaOsB42yHjRqaPWwX1Xts6MDvQ6zfZDkjqp6fdf90NRgPWiU9aBR1oNGWQ8aZT1olPWwjcOMJUmSJEm9Y5iVJEmSJPWOYXb8Ptt1BzSlWA8aZT1olPWgUdaDRlkPGmU9tJwzK0mSJEnqHe/MSpIkSZJ6xzA7JkmOTvKjJOuSfKTr/mj8klyaZGOSH4607ZVkZZL/bD+/uG1Pkn9q6+M/kizorucahySzk9ycZG2Su5N8oG23JgYoyS5Jbk/yg7Yelrbt+ye5rX3dv5JkRtu+c7u/rj0+t9MfQGORZFqSu5J8s923HgYqyY+TrEmyOskdbZvXi4FKsmeSq5Lcm+SeJAuthx0zzI5BkmnAp4G3AfOA45PM67ZXmgRfAI7eru0jwE1VdSBwU7sPTW0c2H6cBnxmkvqoyfMU8KGqmgccCry//T1gTQzTE8CRVXUwMB84OsmhwPnAhVX1cuCnwKnt+acCP23bL2zP0/PPB4B7Rvath2F7c1XNH3nkiteL4fpH4LqqehVwMM3vCethBwyz4/HHwLqqWl9VTwJfBt7dcZ80ZlX1r8Cm7ZrfDaxot1cAfz7Sflk1bgX2TPLSSemoJkVVPVRV/95uP0ZzIXoZ1sQgta/r4+3uRPtRwJHAVW379vWwtU6uAt6SJJPTW02GJLOAxcAl7X6wHvRMXi8GKMkewJuA5QBV9WRV/QzrYYcMs+PxMuCBkf0NbZuGZ9+qeqjdfhjYt922RgakHRL4OuA2rInBaoeUrgY2AiuB+4CfVdVT7Smjr/nT9dAe/zkwc1I7rHG7CPgbYEu7PxPrYcgKuCHJnUlOa9u8XgzT/sAjwOfbaQiXJHkh1sMOGWalSVLN0uEuHz4wSXYDrgZOr6pfjB6zJoalqv63quYDs2hG8Lyq2x6pK0neAWysqju77oumjMOragHNkNH3J3nT6EGvF4MyHVgAfKaqXgf8D9uGFAPWwyjD7Hg8CMwe2Z/Vtml4frJ1qEf7eWPbbo0MQJIJmiD7par6WttsTQxcO1zsZmAhzXCw6e2h0df86Xpoj+8B/Pfk9lRj9CfAu5L8mGYq0pE0c+Ssh4GqqgfbzxuBa2je8PJ6MUwbgA1VdVu7fxVNuLUedsAwOx7/BhzYrko4AzgOuLbjPqkb1wIntdsnAd8YaT+xXYHuUODnI0NH9DzQzmdbDtxTVZ8cOWRNDFCSfZLs2W7vChxFM4/6ZmBJe9r29bC1TpYAq8oHwz9vVNVZVTWrqubS/I2wqqrei/UwSElemGT3rdvAW4Ef4vVikKrqYeCBJK9sm94CrMV62KH4u3A8krydZj7MNODSqlrWbY80bkmuBI4A9gZ+ApwDfB34KjAHuB84tqo2tUHnYprVj38JnFJVd3TQbY1JksOBW4A1bJsTdzbNvFlrYmCSHESzYMc0mjeSv1pV5yX5A5o7c3sBdwEnVNUTSXYBvkgz13oTcFxVre+m9xqnJEcAZ1TVO6yHYWpf92va3enAFVW1LMlMvF4MUpL5NIvDzQDWA6fQXjuwHp7BMCtJkiRJ6h2HGUuSJEmSescwK0mSJEnqHcOsJEmSJKl3DLOSJEmSpN4xzEqSJEmSescwK0lSR5LMTLK6/Xg4yYPt9uNJ/rnr/kmSNJX5aB5JkqaAJOcCj1fV33fdF0mS+sA7s5IkTTFJjkjyzXb73CQrktyS5P4kxyT5RJI1Sa5LMtGed0iS7yS5M8n1SV7a7U8hSdJ4GWYlSZr6DgCOBN4FXA7cXFWvBX4FLG4D7aeAJVV1CHApsKyrzkqSNBmmd90BSZL0W32rqjYnWQNMA65r29cAc4FXAn8IrExCe85DHfRTkqRJY5iVJGnqewKgqrYk2VzbFrzYQnMtD3B3VS3sqoOSJE02hxlLktR/PwL2SbIQIMlEktd03CdJksbKMCtJUs9V1ZPAEuD8JD8AVgOHddopSZLGzEfzSJIkSZJ6xzuzkiRJkqTeMcxKkiRJknrHMCtJkiRJ6h3DrCRJkiSpdwyzkiRJkqTeMcxKkiRJknrHMCtJkiRJ6h3DrCRJkiSpd/4P2B/ZLBR/P1IAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1152x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#  Load NASDAQ 100 symbols\n",
    "nasdaq_100_df = pd.read_csv('https://raw.githubusercontent.com/justmobiledev/python-algorithmic-trading/main/data/nasdaq_100.csv')\n",
    "symbols = nasdaq_100_df['Symbol'].to_numpy()\n",
    "\n",
    "#  Run eval for all symbols\n",
    "for symbol in symbols:\n",
    "    global cf\n",
    "    print(f\"Processing {symbol}\")\n",
    "    cfg['symbol'] = symbol\n",
    "    run(cfg)\n",
    "    break\n",
    "       "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "26601672",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tradesystem1]",
   "language": "python",
   "name": "conda-env-tradesystem1-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
